From 131ede28a74bb18037f5bfbbe1f9ac8f26546544 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Thu, 13 Jun 2002 17:41:40 +0000
Subject: pthread fix

---
 main.c      |  1 +
 rfbserver.c | 11 ++++++++---
 sockets.c   | 18 ++++++++++++------
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/main.c b/main.c
index 13ad416..f1f800a 100644
--- a/main.c
+++ b/main.c
@@ -328,6 +328,7 @@ listenerRun(void *data)
 	if (cl && !cl->onHold )
 		rfbStartOnHoldClient(cl);
     }
+    return(NULL);
 }
 
 void 
diff --git a/rfbserver.c b/rfbserver.c
index f936ccc..11aeff6 100644
--- a/rfbserver.c
+++ b/rfbserver.c
@@ -448,9 +448,14 @@ rfbProcessClientProtocolVersion(cl)
 
     pv[sz_rfbProtocolVersionMsg] = 0;
     if (sscanf(pv,rfbProtocolVersionFormat,&major_,&minor_) != 2) {
-        rfbLog("rfbProcessClientProtocolVersion: not a valid RFB client\n");
-        rfbCloseClient(cl);
-        return;
+        char name[1024]; 
+	if(sscanf(pv,"RFB %03d.%03d %1024s\n",&major_,&minor_,name) != 3) {
+	    rfbLog("rfbProcessClientProtocolVersion: not a valid RFB client\n");
+	    rfbCloseClient(cl);
+	    return;
+	}
+	free(cl->host);
+	cl->host=strdup(name);
     }
     rfbLog("Protocol version %d.%d\n", major_, minor_);
 
diff --git a/sockets.c b/sockets.c
index 350ff44..e27ddc6 100644
--- a/sockets.c
+++ b/sockets.c
@@ -309,12 +309,18 @@ rfbCloseClient(cl)
      rfbClientPtr cl;
 {
     LOCK(cl->updateMutex);
-    if (cl->sock != -1) {
-      FD_CLR(cl->sock,&(cl->screen->allFds));
-      shutdown(cl->sock,SHUT_RDWR);
-      close(cl->sock);
-      cl->sock = -1;
-    }
+#ifdef HAVE_PTHREADS
+    if (cl->sock != -1)
+#endif
+      {
+	FD_CLR(cl->sock,&(cl->screen->allFds));
+	if(cl->sock==cl->screen->maxFd)
+	  while(!FD_ISSET(cl->screen->maxFd,&(cl->screen->allFds)))
+	    cl->screen->maxFd--;
+	shutdown(cl->sock,SHUT_RDWR);
+	close(cl->sock);
+	cl->sock = -1;
+      }
     TSIGNAL(cl->updateCond);
     UNLOCK(cl->updateMutex);
 }
-- 
cgit v1.2.3

