summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.c1
-rw-r--r--rfbserver.c11
-rw-r--r--sockets.c18
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);
}