diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 1d9316056b091a66cb738c2f0acd7810b042362a..87c6078c025e729cb6c4f77eb76cd77f63a0ae4f 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -950,6 +950,7 @@ js_recv(JSContext *cx, uintN argc, jsval *arglist) jsval *argv=JS_ARGV(cx, arglist); char* buf; int32 len=512; + int32 timeout=120; JSString* str; jsrefcount rc; js_socket_private_t* p; @@ -961,16 +962,21 @@ js_recv(JSContext *cx, uintN argc, jsval *arglist) return(JS_FALSE); } - if(argc && argv[0]!=JSVAL_VOID) + if(argc && argv[0]!=JSVAL_VOID) { JS_ValueToInt32(cx,argv[0],&len); + if(argc > 1 && argv[1]!=JSVAL_VOID) { + JS_ValueToInt32(cx,argv[0],&timeout); + } + } + if((buf=(char*)malloc(len+1))==NULL) { JS_ReportError(cx,"Error allocating %u bytes",len+1); return(JS_FALSE); } rc=JS_SUSPENDREQUEST(cx); - len = js_socket_recv(p,buf,len,0,120); + len = js_socket_recv(p,buf,len,0,timeout); JS_RESUMEREQUEST(cx, rc); if(len<0) { p->last_error=ERROR_VALUE; @@ -1921,7 +1927,7 @@ static jsSyncMethodSpec js_socket_functions[] = { ,311 }, {"read", js_recv, 1, JSTYPE_ALIAS }, - {"recv", js_recv, 1, JSTYPE_STRING, JSDOCSTR("[maxlen=<tt>512</tt>]") + {"recv", js_recv, 1, JSTYPE_STRING, JSDOCSTR("[maxlen=<tt>512</tt>, [timeout_sec=<tt>120</tt>]]") ,JSDOCSTR("receive a string, default maxlen is 512 characters (AKA read)") ,310 },