Commit ea01e5fd490be41f7876372e5acafb1f1d580478
1 parent
171cd1cd
Fix spurious VNC disconnects on Win32 (Hervé Poussineau).
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4251 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
13 additions
and
3 deletions
vnc.c
| @@ -633,8 +633,18 @@ static void buffer_append(Buffer *buffer, const void *data, size_t len) | @@ -633,8 +633,18 @@ static void buffer_append(Buffer *buffer, const void *data, size_t len) | ||
| 633 | static int vnc_client_io_error(VncState *vs, int ret, int last_errno) | 633 | static int vnc_client_io_error(VncState *vs, int ret, int last_errno) |
| 634 | { | 634 | { |
| 635 | if (ret == 0 || ret == -1) { | 635 | if (ret == 0 || ret == -1) { |
| 636 | - if (ret == -1 && (last_errno == EINTR || last_errno == EAGAIN)) | ||
| 637 | - return 0; | 636 | + if (ret == -1) { |
| 637 | + switch (last_errno) { | ||
| 638 | + case EINTR: | ||
| 639 | + case EAGAIN: | ||
| 640 | +#ifdef _WIN32 | ||
| 641 | + case WSAEWOULDBLOCK: | ||
| 642 | +#endif | ||
| 643 | + return 0; | ||
| 644 | + default: | ||
| 645 | + break; | ||
| 646 | + } | ||
| 647 | + } | ||
| 638 | 648 | ||
| 639 | VNC_DEBUG("Closing down client sock %d %d\n", ret, ret < 0 ? last_errno : 0); | 649 | VNC_DEBUG("Closing down client sock %d %d\n", ret, ret < 0 ? last_errno : 0); |
| 640 | qemu_set_fd_handler2(vs->csock, NULL, NULL, NULL, NULL); | 650 | qemu_set_fd_handler2(vs->csock, NULL, NULL, NULL, NULL); |
| @@ -2086,10 +2096,10 @@ int vnc_display_open(DisplayState *ds, const char *display) | @@ -2086,10 +2096,10 @@ int vnc_display_open(DisplayState *ds, const char *display) | ||
| 2086 | struct sockaddr_in iaddr; | 2096 | struct sockaddr_in iaddr; |
| 2087 | #ifndef _WIN32 | 2097 | #ifndef _WIN32 |
| 2088 | struct sockaddr_un uaddr; | 2098 | struct sockaddr_un uaddr; |
| 2099 | + const char *p; | ||
| 2089 | #endif | 2100 | #endif |
| 2090 | int reuse_addr, ret; | 2101 | int reuse_addr, ret; |
| 2091 | socklen_t addrlen; | 2102 | socklen_t addrlen; |
| 2092 | - const char *p; | ||
| 2093 | VncState *vs = ds ? (VncState *)ds->opaque : vnc_state; | 2103 | VncState *vs = ds ? (VncState *)ds->opaque : vnc_state; |
| 2094 | const char *options; | 2104 | const char *options; |
| 2095 | int password = 0; | 2105 | int password = 0; |