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>
pull/1/head
Christian Beier 15 years ago committed by Johannes Schindelin
parent 9ed410668c
commit 49cdfb4c1f

@ -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;
}

@ -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 */

Loading…
Cancel
Save