diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index b178a1b867362fd4017c8d2ceab8987a843e8bc3..c366a5c3dcc0a4b10c14910c91db463f5c942bea 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -849,7 +849,7 @@ js_getsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 	opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level);
 	len = sizeof(val);
 
-	if(getsockopt(p->sock, level, opt, (void*)&val, &len)==0) {
+	if(opt!=-1 && getsockopt(p->sock, level, opt, (void*)&val, &len)==0) {
 		dbprintf(FALSE, p, "option %d = %d",opt,val);
 		JS_NewNumberValue(cx,val,rval);
 	} else {
diff --git a/src/sbbs3/sockopts.c b/src/sbbs3/sockopts.c
index 90ca4167beb78f0445948833b47e61e882274c0f..cdc05edb24d368637238ef3c4c5f8097cc141ef4 100644
--- a/src/sbbs3/sockopts.c
+++ b/src/sbbs3/sockopts.c
@@ -76,6 +76,8 @@ int DLLCALL sockopt(char* str, int* level)
 			return(option_names[i].value);
 		}
 	}
+	if(!isdigit(str[0]))	/* unknown option name */
+		return(-1);
 	return(strtoul(str,NULL,0));
 }
 
@@ -118,7 +120,8 @@ int DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, char* error)
 		p=name;
 		while(*p && *p>' ') p++;
 		if(*p) *(p++)=0;
-		option=sockopt(name,&level);
+		if((option=sockopt(name,&level))==-1)
+			continue;
 		while(*p && *p<=' ') p++;
 		len=sizeof(value);
 		value=strtol(p,NULL,0);