Commit ea01e5fd490be41f7876372e5acafb1f1d580478

Authored by balrog
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
@@ -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;