diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 8b67eda7be96de0246357c9ca559f82b1e733501..f67dcc372ed9d2c7abb315ca9b71b1ad7eb2b726 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -4763,11 +4763,19 @@ void DLLCALL ftp_server(void* arg)
 
 			if(client_socket == INVALID_SOCKET)
 			{
-				if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINTR || ERROR_VALUE == EINVAL) 
+#if 0	/* is this necessary still? */
+				if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINTR || ERROR_VALUE == EINVAL) {
             		lprintf(LOG_NOTICE,"0000 FTP socket closed while listening");
-				else
-					lprintf(LOG_WARNING,"0000 !ERROR %d accepting connection", ERROR_VALUE);
-				break;
+					break;
+				}
+#endif
+				lprintf(LOG_WARNING,"%04d !ERROR %d accepting connection"
+					,server_socket, ERROR_VALUE);
+#ifdef _WIN32
+				if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+					break;
+#endif
+				continue;
 			}
 			if(startup->socket_open!=NULL)
 				startup->socket_open(startup->cbdata,TRUE);
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 2669de7da088ddee76f16dd4483704d8641b7ded..2fde1d7a6b70fd5d3cc2e329a3daf59485d1bf29 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -4259,11 +4259,20 @@ void DLLCALL mail_server(void* arg)
 
 				if(client_socket == INVALID_SOCKET)
 				{
-					if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINVAL)
-            			lprintf(LOG_NOTICE,"0000 SMTP socket closed while listening");
-					else
-						lprintf(LOG_WARNING,"%04d !ERROR %d accept failed", server_socket, ERROR_VALUE);
-					break;
+#if 0	/* is this necessary still? */
+					if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINVAL) {
+            			lprintf(LOG_NOTICE,"%04d SMTP socket closed while listening"
+							,server_socket);
+						break;
+					}
+#endif
+					lprintf(LOG_WARNING,"%04d SMTP !ERROR %d accepting connection"
+						,server_socket, ERROR_VALUE);
+#ifdef _WIN32
+					if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+						break;
+#endif
+					continue;
 				}
 				if(startup->socket_open!=NULL)
 					startup->socket_open(startup->cbdata,TRUE);
@@ -4275,7 +4284,7 @@ void DLLCALL mail_server(void* arg)
 				}
 
 				if(active_clients>=startup->max_clients) {
-					lprintf(LOG_WARNING,"%04d !MAXMIMUM CLIENTS (%u) reached, access denied"
+					lprintf(LOG_WARNING,"%04d SMTP !MAXMIMUM CLIENTS (%u) reached, access denied"
 						,client_socket, startup->max_clients);
 					sockprintf(client_socket,"421 Maximum active clients reached, please try again later.");
 					mswait(3000);
@@ -4286,14 +4295,14 @@ void DLLCALL mail_server(void* arg)
 				l=1;
 
 				if((i=ioctlsocket(client_socket, FIONBIO, &l))!=0) {
-					lprintf(LOG_ERR,"%04d !ERROR %d (%d) disabling blocking on socket"
+					lprintf(LOG_ERR,"%04d SMTP !ERROR %d (%d) disabling blocking on socket"
 						,client_socket, i, ERROR_VALUE);
 					mail_close_socket(client_socket);
 					continue;
 				}
 
 				if((smtp=malloc(sizeof(smtp_t)))==NULL) {
-					lprintf(LOG_CRIT,"%04d !ERROR allocating %u bytes of memory for smtp_t"
+					lprintf(LOG_CRIT,"%04d SMTP !ERROR allocating %u bytes of memory for smtp_t"
 						,client_socket, sizeof(smtp_t));
 					mail_close_socket(client_socket);
 					continue;
@@ -4314,11 +4323,19 @@ void DLLCALL mail_server(void* arg)
 
 				if(client_socket == INVALID_SOCKET)
 				{
-					if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINVAL)
+#if 0	/* is this necessary still? */
+					if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINVAL) {
             			lprintf(LOG_NOTICE,"%04d POP3 socket closed while listening",pop3_socket);
-					else
-						lprintf(LOG_WARNING,"%04d !ERROR %d accept failed", pop3_socket, ERROR_VALUE);
-					break;
+						break;
+					}
+#endif
+					lprintf(LOG_WARNING,"%04d POP3 !ERROR %d accepting connection"
+						,pop3_socket, ERROR_VALUE);
+#ifdef _WIN32
+					if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+						break;
+#endif
+					continue;
 				}
 				if(startup->socket_open!=NULL)
 					startup->socket_open(startup->cbdata,TRUE);
@@ -4330,7 +4347,7 @@ void DLLCALL mail_server(void* arg)
 				}
 
 				if(active_clients>=startup->max_clients) {
-					lprintf(LOG_WARNING,"%04d !MAXMIMUM CLIENTS (%u) reached, access denied"
+					lprintf(LOG_WARNING,"%04d POP3 !MAXMIMUM CLIENTS (%u) reached, access denied"
 						,client_socket, startup->max_clients);
 					sockprintf(client_socket,"-ERR Maximum active clients reached, please try again later.");
 					mswait(3000);
@@ -4342,7 +4359,7 @@ void DLLCALL mail_server(void* arg)
 				l=1;
 
 				if((i=ioctlsocket(client_socket, FIONBIO, &l))!=0) {
-					lprintf(LOG_ERR,"%04d !ERROR %d (%d) disabling blocking on socket"
+					lprintf(LOG_ERR,"%04d POP3 !ERROR %d (%d) disabling blocking on socket"
 						,client_socket, i, ERROR_VALUE);
 					sockprintf(client_socket,"-ERR System error, please try again later.");
 					mswait(3000);
@@ -4351,7 +4368,7 @@ void DLLCALL mail_server(void* arg)
 				}
 
 				if((pop3=malloc(sizeof(pop3_t)))==NULL) {
-					lprintf(LOG_CRIT,"%04d !ERROR allocating %u bytes of memory for pop3_t"
+					lprintf(LOG_CRIT,"%04d POP3 !ERROR allocating %u bytes of memory for pop3_t"
 						,client_socket,sizeof(pop3_t));
 					sockprintf(client_socket,"-ERR System error, please try again later.");
 					mswait(3000);
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 186519a7a7d1bb8ed9b45a39f694365c825450eb..bfb5d651b5675bcdef2f624fe41d9869baa32281 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -4260,12 +4260,18 @@ void DLLCALL bbs_thread(void* arg)
 			continue;
 
 		if(client_socket == INVALID_SOCKET)	{
+#if 0	/* is this necessary still? */
 			if(ERROR_VALUE == ENOTSOCK || ERROR_VALUE == EINTR || ERROR_VALUE == EINVAL) {
             	lputs(LOG_NOTICE,"BBS socket closed");
 				break;
 			}
+#endif
 			lprintf(LOG_ERR,"!ERROR %d accepting connection", ERROR_VALUE);
-			break;	// was continue, July-01-2002
+#ifdef _WIN32
+			if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+				break;
+#endif
+			continue;
 		}
 		char host_ip[32];
 
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 4f134b5aa0cea97085bc48c127d48ec000a478ea..485f9571f3c4f632208f1368ab4cf425359265ed 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1964,9 +1964,13 @@ void DLLCALL services_thread(void* arg)
             				lprintf(LOG_NOTICE,"%04d %s socket closed while listening"
 								,service[i].socket, service[i].protocol);
 						else
-							lprintf(LOG_WARNING,"%04d %s !ERROR %d accept failed" 
+							lprintf(LOG_WARNING,"%04d %s !ERROR %d accepting connection" 
 								,service[i].socket, service[i].protocol, ERROR_VALUE);
-						break;
+#ifdef _WIN32
+						if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+							break;
+#endif
+						continue;
 					}
 					sockets++;
 #if 0 /*def _DEBUG */
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index e4ea9dda96e3719e5473bba161398f2bb14023b4..062017d1c4a66d6706a974ddc1b66f699140becd 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -3239,6 +3239,10 @@ void DLLCALL web_server(void* arg)
 
 			if(client_socket == INVALID_SOCKET)	{
 				lprintf(LOG_WARNING,"!ERROR %d accepting connection", ERROR_VALUE);
+#ifdef _WIN32
+				if(WSAGetLastError()==WSAENOBUFS)	/* recycle (re-init WinSock) on this error */
+					break;
+#endif
 				continue;
 			}