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 633 static int vnc_client_io_error(VncState *vs, int ret, int last_errno)
634 634 {
635 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 649 VNC_DEBUG("Closing down client sock %d %d\n", ret, ret < 0 ? last_errno : 0);
640 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 2096 struct sockaddr_in iaddr;
2087 2097 #ifndef _WIN32
2088 2098 struct sockaddr_un uaddr;
  2099 + const char *p;
2089 2100 #endif
2090 2101 int reuse_addr, ret;
2091 2102 socklen_t addrlen;
2092   - const char *p;
2093 2103 VncState *vs = ds ? (VncState *)ds->opaque : vnc_state;
2094 2104 const char *options;
2095 2105 int password = 0;
... ...