summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Beier <dontmind@freeshell.org>2009-11-11 18:18:23 +0100
committerJohannes Schindelin <johannes.schindelin@gmx.de>2009-11-12 13:21:19 +0100
commit49cdfb4c1f25b371474f3a355e205471daa08640 (patch)
treeb2e425dff5c687b4e72b84055693b2c7124a4736
parent9ed410668c19ddd6b2c12709d6a5383e7f7a6e07 (diff)
downloadlibtdevnc-49cdfb4c1f25b371474f3a355e205471daa08640.tar.gz
libtdevnc-49cdfb4c1f25b371474f3a355e205471daa08640.zip
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.c24
-rw-r--r--rfb/rfbclient.h2
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 */