diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index cf672d65c17e6c090ee39a178af3b481bbaa5f84..b72c2e8909ab1ea09f2784c5ebf952b8a0fbc662 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;