From 0d40904d9f1556540f676bb662db2c1e9d120f7e Mon Sep 17 00:00:00 2001 From: dscho Date: Tue, 28 Feb 2006 22:54:14 +0000 Subject: [PATCH] rfbCheckFds now returns the number of processed events --- libvncserver/sockets.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libvncserver/sockets.c b/libvncserver/sockets.c index a4c6cad..181862d 100755 --- a/libvncserver/sockets.c +++ b/libvncserver/sockets.c @@ -226,6 +226,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) int sock; rfbClientIteratorPtr i; rfbClientPtr cl; + int result = 0; if (!rfbScreen->inetdInitDone && rfbScreen->inetdSock != -1) { rfbNewClientConnection(rfbScreen,rfbScreen->inetdSock); @@ -238,7 +239,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) tv.tv_usec = usec; nfds = select(rfbScreen->maxFd + 1, &fds, NULL, NULL /* &fds */, &tv); if (nfds == 0) { - return 0; + return result; } if (nfds < 0) { #ifdef WIN32 @@ -246,22 +247,24 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) #endif if (errno != EINTR) rfbLogPerror("rfbCheckFds: select"); - return 0; + return -1; } + result += nfds; + if (rfbScreen->listenSock != -1 && FD_ISSET(rfbScreen->listenSock, &fds)) { if ((sock = accept(rfbScreen->listenSock, (struct sockaddr *)&addr, &addrlen)) < 0) { rfbLogPerror("rfbCheckFds: accept"); - return 0; + return -1; } #ifndef WIN32 if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) { rfbLogPerror("rfbCheckFds: fcntl"); closesocket(sock); - return 0; + return -1; } #endif @@ -269,7 +272,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) (char *)&one, sizeof(one)) < 0) { rfbLogPerror("rfbCheckFds: setsockopt"); closesocket(sock); - return 0; + return -1; } #ifdef USE_LIBWRAP @@ -278,7 +281,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) rfbLog("Rejected connection from client %s\n", inet_ntoa(addr.sin_addr)); closesocket(sock); - return 0; + return -1; } #endif @@ -288,7 +291,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) FD_CLR(rfbScreen->listenSock, &fds); if (--nfds == 0) - return 0; + return result; } if ((rfbScreen->udpSock != -1) && FD_ISSET(rfbScreen->udpSock, &fds)) { @@ -313,7 +316,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) (struct sockaddr *)&addr, addrlen) < 0) { rfbLogPerror("rfbCheckFds: UDP: connect"); rfbDisconnectUDPSock(rfbScreen); - return 0; + return -1; } rfbNewUDPConnection(rfbScreen,rfbScreen->udpSock); @@ -324,7 +327,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) FD_CLR(rfbScreen->udpSock, &fds); if (--nfds == 0) - return 0; + return result; } i = rfbGetClientIterator(rfbScreen); @@ -337,7 +340,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec) } rfbReleaseClientIterator(i); } while(rfbScreen->handleEventsEagerly); - return 1; + return result; }