From 49ad114be1920e3e7786ea7c4f4c6dc15a940ba5 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Fri, 9 Mar 2018 01:34:32 +0000 Subject: [PATCH] Actually implement the timeout specified in Socket.recv(). This has apparently never been implemented for non-TLS sockets, but it is used by some. --- src/sbbs3/js_socket.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index cf672d65c1..b72c2e8909 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -121,11 +121,19 @@ static ptrdiff_t js_socket_recv(js_socket_private_t *p, void *buf, size_t len, i { ptrdiff_t total=0; int copied,ret; + fd_set socket_set; + struct timeval tv = {0, 0}; if (len == 0) return total; - if(p->session==-1) - return(recv(p->sock, buf, len, flags)); /* Blocked here, indefinitely, in MSP-UDP service */ + if(p->session==-1) { + FD_ZERO(&socket_set); + FD_SET(p->sock,&socket_set); + tv.tv_sec = timeout; + if(select(p->sock+1,&socket_set,NULL,NULL,&tv)==1) + return(recv(p->sock, buf, len, flags)); /* Blocked here, indefinitely, in MSP-UDP service */ + return 0; + } #if 0 if (do_cryptAttribute(p->session, CRYPT_OPTION_NET_READTIMEOUT, p->nonblocking?0:timeout) != CRYPT_OK) return -1; -- GitLab