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;