diff --git a/exec/load/sockdefs.js b/exec/load/sockdefs.js index 7295dcc521b9372523b2dd8ecd5826740e4dff24..f41a6d4ae6c3b7956770e81dde49295df4bff59d 100644 --- a/exec/load/sockdefs.js +++ b/exec/load/sockdefs.js @@ -96,4 +96,5 @@ var sockopts = [ "BROADCAST", "OOBINLINE", "ACCEPTCONN", + "TCP_NODELAY", ]; \ No newline at end of file diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 0953973c5d1340dca1ba3fd1b8ba8ba26b2fad22..1dc1d90ec0e93b61248912e833b0e8f2058dbdcf 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -848,7 +848,8 @@ js_getsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0]))); len = sizeof(val); - if(getsockopt(p->sock,SOL_SOCKET,opt,(void*)&val,&len)==0) { + if(getsockopt(p->sock,opt==TCP_NODELAY ? IPPROTO_TCP : SOL_SOCKET + ,opt, (void*)&val, &len)==0) { dbprintf(FALSE, p, "option %d = %d",opt,val); JS_NewNumberValue(cx,val,rval); } else { @@ -877,7 +878,9 @@ js_setsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0]))); JS_ValueToInt32(cx,argv[1],&val); - *rval = BOOLEAN_TO_JSVAL(setsockopt(p->sock,SOL_SOCKET,opt,(char*)&val,sizeof(val))==0); + *rval = BOOLEAN_TO_JSVAL( + setsockopt(p->sock,opt==TCP_NODELAY ? IPPROTO_TCP : SOL_SOCKET + ,opt, (char*)&val, sizeof(val))==0); p->last_error=ERROR_VALUE; return(JS_TRUE);