diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index 90ec8b731ab43b92103f9deb63c6341e20f3e6cb..4c0983ea75156e6d5cc1b9fd6142a9f61ccd653b 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -878,7 +878,7 @@ js_getsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 		return(JS_FALSE);
 	}
 
-	opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level);
+	opt = getSocketOptionByName(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level);
 	len = sizeof(val);
 
 	if(opt!=-1 && getsockopt(p->sock, level, opt, (void*)&val, &len)==0) {
@@ -908,7 +908,7 @@ js_setsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 		return(JS_FALSE);
 	}
 
-	opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level);
+	opt = getSocketOptionByName(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level);
 	JS_ValueToInt32(cx,argv[1],&val);
 
 	*rval = BOOLEAN_TO_JSVAL(
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 2449effd510c7df3090fffe4739baebcef0aee6c..558b877fa52c21048f79c08c61b58498b5d926fd 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -873,7 +873,6 @@ extern "C" {
 	DLLEXPORT BOOL		DLLCALL putmsgptrs(scfg_t* cfg, uint usernumber, subscan_t* subscan);
 
 	/* sockopt.c */
-	DLLEXPORT int		DLLCALL sockopt(char* str, int* level);
 	DLLEXPORT int		DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, const char* section
 		,char* error, size_t errlen);
 
diff --git a/src/sbbs3/sockopts.c b/src/sbbs3/sockopts.c
index 3c91df591a612561ba72ce3eb347665146b1a5c6..5d0e4311e2da665efccc2cd26e22d781c51786e8 100644
--- a/src/sbbs3/sockopts.c
+++ b/src/sbbs3/sockopts.c
@@ -38,134 +38,6 @@
 #include "sbbs.h"
 #include "ini_file.h"	/* ini file API */
 
-static struct {
-	char*	name;
-	int		level;
-	int		value;
-} option_names[] = {
-	{ "TYPE",				SOL_SOCKET,		SO_TYPE				},
-	{ "DEBUG",				SOL_SOCKET,		SO_DEBUG			},
-	{ "LINGER",				SOL_SOCKET,		SO_LINGER			},
-	{ "SNDBUF",				SOL_SOCKET,		SO_SNDBUF			},
-	{ "RCVBUF",				SOL_SOCKET,		SO_RCVBUF			},
-	{ "SNDLOWAT",			SOL_SOCKET,		SO_SNDLOWAT			},
-	{ "RCVLOWAT",			SOL_SOCKET,		SO_RCVLOWAT			},
-	{ "SNDTIMEO",			SOL_SOCKET,		SO_SNDTIMEO			},
-	{ "RCVTIMEO",			SOL_SOCKET,		SO_RCVTIMEO			},
-	{ "REUSEADDR",			SOL_SOCKET,		SO_REUSEADDR		},	
-	{ "KEEPALIVE",			SOL_SOCKET,		SO_KEEPALIVE		},
-	{ "DONTROUTE",			SOL_SOCKET,		SO_DONTROUTE		},
-	{ "BROADCAST",			SOL_SOCKET,		SO_BROADCAST		},
-	{ "OOBINLINE",			SOL_SOCKET,		SO_OOBINLINE		},
-#ifdef SO_ACCEPTCONN											
-	{ "ACCEPTCONN",			SOL_SOCKET,		SO_ACCEPTCONN		},
-#endif
-
-	/* IPPROTO-level socket options */
-	{ "TCP_NODELAY",		IPPROTO_TCP,	TCP_NODELAY			},
-	/* The following are platform-specific */					
-#ifdef TCP_MAXSEG											
-	{ "TCP_MAXSEG",			IPPROTO_TCP,	TCP_MAXSEG			},
-#endif															
-#ifdef TCP_CORK													
-	{ "TCP_CORK",			IPPROTO_TCP,	TCP_CORK			},
-#endif															
-#ifdef TCP_KEEPIDLE												
-	{ "TCP_KEEPIDLE",		IPPROTO_TCP,	TCP_KEEPIDLE		},
-#endif															
-#ifdef TCP_KEEPINTVL											
-	{ "TCP_KEEPINTVL",		IPPROTO_TCP,	TCP_KEEPINTVL		},
-#endif															
-#ifdef TCP_KEEPCNT												
-	{ "TCP_KEEPCNT",		IPPROTO_TCP,	TCP_KEEPCNT			},
-#endif															
-#ifdef TCP_SYNCNT												
-	{ "TCP_SYNCNT",			IPPROTO_TCP,	TCP_SYNCNT			},
-#endif															
-#ifdef TCP_LINGER2												
-	{ "TCP_LINGER2",		IPPROTO_TCP,	TCP_LINGER2			},
-#endif														
-#ifdef TCP_DEFER_ACCEPT										
-	{ "TCP_DEFER_ACCEPT",	IPPROTO_TCP,	TCP_DEFER_ACCEPT	},
-#endif															
-#ifdef TCP_WINDOW_CLAMP											
-	{ "TCP_WINDOW_CLAMP",	IPPROTO_TCP,	TCP_WINDOW_CLAMP	},
-#endif														
-#ifdef TCP_QUICKACK											
-	{ "TCP_QUICKACK",		IPPROTO_TCP,	TCP_QUICKACK		},
-#endif						
-#ifdef TCP_NOPUSH			
-	{ "TCP_NOPUSH",			IPPROTO_TCP,	TCP_NOPUSH			},
-#endif						
-#ifdef TCP_NOOPT			
-	{ "TCP_NOOPT",			IPPROTO_TCP,	TCP_NOOPT			},
-#endif
-	{ NULL }
-};
-
-/* This function is used by js_socket.c -> js_get/setsockopt() */
-int DLLCALL sockopt(char* str, int* level)
-{
-	int i;
-
-	*level=SOL_SOCKET;	/* default option level */
-	for(i=0;option_names[i].name;i++) {
-		if(stricmp(str,option_names[i].name)==0) {
-			*level = option_names[i].level;
-			return(option_names[i].value);
-		}
-	}
-	if(!isdigit(str[0]))	/* unknown option name */
-		return(-1);
-	return(strtoul(str,NULL,0));
-}
-
-static int iniGetSocketOptions(str_list_t list, SOCKET sock, const char* section
-						 ,char* error, size_t errlen)
-{
-	int			i;
-	int			result;
-	char*		name;
-	BYTE*		vp;
-	socklen_t	len;
-	int			option;
-	int			level;
-	int			value;
-	LINGER		linger;
-
-	for(i=0;option_names[i].name!=NULL;i++) {
-		name = option_names[i].name;
-		if(!iniValueExists(list, section, name))
-			continue;
-		value=iniGetInteger(list, section, name, 0);
-
-		vp=(BYTE*)&value;
-		len=sizeof(value);
-
-		level	= option_names[i].level;
-		option	= option_names[i].value;
-
-		if(option == SO_LINGER) {
-			if(value) {
-				linger.l_onoff = TRUE;
-				linger.l_linger = value;
-			} else {
-				ZERO_VAR(linger);
-			}
-			vp=(BYTE*)&linger;
-			len=sizeof(linger);
-		}
-
-		if((result=setsockopt(sock,level,option,vp,len)) != 0) {
-			safe_snprintf(error,errlen,"%d setting socket option (%s, %d) to %d"
-				,ERROR_VALUE, name, option, value);
-			return(result);
-		}
-	}
-
-	return(0);
-}
-
 int DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, const char* section, char* error, size_t errlen)
 {
 	char		cfgfile[MAX_PATH+1];
@@ -190,12 +62,12 @@ int DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, const char* section, ch
 		return(result);
 	}
 
-	result=iniGetSocketOptions(list,sock,ROOT_SECTION,error,errlen);
+	result=iniGetSocketOptions(list,ROOT_SECTION,sock,error,errlen);
 
 	if(result==0)
-		result=iniGetSocketOptions(list,sock,type==SOCK_STREAM ? "tcp":"udp",error,errlen);
+		result=iniGetSocketOptions(list,type==SOCK_STREAM ? "tcp":"udp",sock,error,errlen);
 	if(result==0 && section!=NULL)
-		result=iniGetSocketOptions(list,sock,section,error,errlen);
+		result=iniGetSocketOptions(list,section,sock,error,errlen);
 
 	iniFreeStringList(list);