Skip to contentSkip to conversation

Fix VNC on Windows

PATCH New Hervé Poussineau 1 participant 1 message Apr 15, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix VNC on Windows

Hi,

VNC server included in Qemu disconnects its client very often. It is because recv() function returns WSAEWOULDBLOCK when no data is available. Attached patch fixes this problem by not considering WSAEWOULDBLOCK as an error, so prevents disconnecting the client.

The patch also fixes a warning which happens on WIN32 hosts.

Hervé

vnc.c +13 -3
Index: vnc.c
===================================================================
@@ -633,8 +633,18 @@
 static int vnc_client_io_error(VncState *vs, int ret, int last_errno)
 {
     if (ret == 0 || ret == -1) {
-	if (ret == -1 && (last_errno == EINTR || last_errno == EAGAIN))
-	    return 0;
+    if (ret == -1) {
+        switch (last_errno) {
+            case EINTR:
+            case EAGAIN:
+#ifdef _WIN32
+            case WSAEWOULDBLOCK:
+#endif
+                return 0;
+            default:
+                break;
+        }
+    }
 
 	VNC_DEBUG("Closing down client sock %d %d\n", ret, ret < 0 ? last_errno : 0);
 	qemu_set_fd_handler2(vs->csock, NULL, NULL, NULL, NULL);
@@ -2086,10 +2096,10 @@
     struct sockaddr_in iaddr;
 #ifndef _WIN32
     struct sockaddr_un uaddr;
+    const char *p;
 #endif
     int reuse_addr, ret;
     socklen_t addrlen;
-    const char *p;
     VncState *vs = ds ? (VncState *)ds->opaque : vnc_state;
     const char *options;
     int password = 0;