diff --git a/src/sbbs3/sockopts.c b/src/sbbs3/sockopts.c
index be79d44312c82f9f51b221167540093bb683dd47..3c91df591a612561ba72ce3eb347665146b1a5c6 100644
--- a/src/sbbs3/sockopts.c
+++ b/src/sbbs3/sockopts.c
@@ -120,7 +120,7 @@ int DLLCALL sockopt(char* str, int* level)
 	return(strtoul(str,NULL,0));
 }
 
-static int parse_sockopts_section(str_list_t list, SOCKET sock, int type, const char* section
+static int iniGetSocketOptions(str_list_t list, SOCKET sock, const char* section
 						 ,char* error, size_t errlen)
 {
 	int			i;
@@ -135,7 +135,7 @@ static int parse_sockopts_section(str_list_t list, SOCKET sock, int type, const
 
 	for(i=0;option_names[i].name!=NULL;i++) {
 		name = option_names[i].name;
-		if(!iniValueExists(list,section,name))
+		if(!iniValueExists(list, section, name))
 			continue;
 		value=iniGetInteger(list, section, name, 0);
 
@@ -145,21 +145,15 @@ static int parse_sockopts_section(str_list_t list, SOCKET sock, int type, const
 		level	= option_names[i].level;
 		option	= option_names[i].value;
 
-		switch(option) {
-			case SO_LINGER:
-				if(value) {
-					linger.l_onoff = TRUE;
-					linger.l_linger = value;
-				} else {
-					ZERO_VAR(linger);
-				}
-				vp=(BYTE*)&linger;
-				len=sizeof(linger);
-				break;
-			case SO_KEEPALIVE:
-				if(type!=SOCK_STREAM)
-					continue;
-				break;
+		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) {
@@ -172,7 +166,6 @@ static int parse_sockopts_section(str_list_t list, SOCKET sock, int type, const
 	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];
@@ -197,10 +190,12 @@ int DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, const char* section, ch
 		return(result);
 	}
 
-	result=parse_sockopts_section(list,sock,type,ROOT_SECTION,error,errlen);
+	result=iniGetSocketOptions(list,sock,ROOT_SECTION,error,errlen);
 
+	if(result==0)
+		result=iniGetSocketOptions(list,sock,type==SOCK_STREAM ? "tcp":"udp",error,errlen);
 	if(result==0 && section!=NULL)
-		result=parse_sockopts_section(list,sock,type,section,error,errlen);
+		result=iniGetSocketOptions(list,sock,section,error,errlen);
 
 	iniFreeStringList(list);