diff options
author | Christian Beier <dontmind@freeshell.org> | 2009-11-11 18:18:23 +0100 |
---|---|---|
committer | Johannes Schindelin <johannes.schindelin@gmx.de> | 2009-11-12 13:21:19 +0100 |
commit | 49cdfb4c1f25b371474f3a355e205471daa08640 (patch) | |
tree | b2e425dff5c687b4e72b84055693b2c7124a4736 | |
parent | 9ed410668c19ddd6b2c12709d6a5383e7f7a6e07 (diff) | |
download | libvncserver-49cdfb4c1f25b371474f3a355e205471daa08640.zip libvncserver-49cdfb4c1f25b371474f3a355e205471daa08640.tar.gz |
libvncclient: better return value for non-forking listen.
The return value now better reflects what has happened:
1 on success (incoming connection on listen socket, we
accepted it successfully), -1 on error, 0 on timeout.
Also change the select calls to not check _all_ possible
file descriptors.
Signed-off-by: Christian Beier <dontmind@freeshell.org>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
-rw-r--r-- | libvncclient/listen.c | 24 | ||||
-rw-r--r-- | rfb/rfbclient.h | 2 |
2 files changed, 15 insertions, 11 deletions
diff --git a/libvncclient/listen.c b/libvncclient/listen.c index 7a0501c..637abb1 100644 --- a/libvncclient/listen.c +++ b/libvncclient/listen.c @@ -76,7 +76,7 @@ listenForIncomingConnections(rfbClient* client) FD_SET(listenSocket, &fds); - select(FD_SETSIZE, &fds, NULL, NULL, NULL); + select(listenSocket+1, &fds, NULL, NULL, NULL); if (FD_ISSET(listenSocket, &fds)) { client->sock = AcceptTcpConnection(listenSocket); @@ -114,13 +114,16 @@ listenForIncomingConnections(rfbClient* client) * listenForIncomingConnectionsNoFork() - listen for incoming connections * from servers, but DON'T fork, instead just wait timeout microseconds. * If timeout is negative, block indefinitly. + * Returns 1 on success (there was an incoming connection on the listen socket + * and we accepted it successfully), -1 on error, 0 on timeout. */ -rfbBool +int listenForIncomingConnectionsNoFork(rfbClient* client, int timeout) { fd_set fds; struct timeval to; + int r; to.tv_sec= timeout / 1000000; to.tv_usec= timeout % 1000000; @@ -132,7 +135,7 @@ listenForIncomingConnectionsNoFork(rfbClient* client, int timeout) client->listenSock = ListenAtTcpPort(client->listenPort); if (client->listenSock < 0) - return FALSE; + return -1; rfbClientLog("%s -listennofork: Listening on port %d\n", client->programName,client->listenPort); @@ -145,23 +148,24 @@ listenForIncomingConnectionsNoFork(rfbClient* client, int timeout) FD_SET(client->listenSock, &fds); if (timeout < 0) - select(FD_SETSIZE, &fds, NULL, NULL, NULL); + r = select(client->listenSock+1, &fds, NULL, NULL, NULL); else - select(FD_SETSIZE, &fds, NULL, NULL, &to); + r = select(client->listenSock+1, &fds, NULL, NULL, &to); - if (FD_ISSET(client->listenSock, &fds)) + if (r > 0) { client->sock = AcceptTcpConnection(client->listenSock); if (client->sock < 0) - return FALSE; + return -1; if (!SetNonBlocking(client->sock)) - return FALSE; + return -1; close(client->listenSock); - return TRUE; + return r; } - return FALSE; + /* r is now either 0 (timeout) or -1 (error) */ + return r; } diff --git a/rfb/rfbclient.h b/rfb/rfbclient.h index 8d6a184..d70ece1 100644 --- a/rfb/rfbclient.h +++ b/rfb/rfbclient.h @@ -314,7 +314,7 @@ extern rfbBool HandleCursorShape(rfbClient* client,int xhot, int yhot, int width /* listen.c */ extern void listenForIncomingConnections(rfbClient* viewer); -extern rfbBool listenForIncomingConnectionsNoFork(rfbClient* viewer, int usec_timeout); +extern int listenForIncomingConnectionsNoFork(rfbClient* viewer, int usec_timeout); /* rfbproto.c */ |