diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index c0375988ff58234e6f231225df327af94a6bbc1e..6373dd1e8ef3a6502c9d2adc0776e3d8e2dd749e 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -796,22 +796,6 @@ enum {							/* Values of mode for userlist function     */
 								
 #define BO_OPENFILE 0			/* Backout types */
 
-#if defined(__unix__)
-	#include <syslog.h>
-#else
-	/*
-	 * log priorities (copied from BSD syslog.h)
-	 */
-	#define LOG_EMERG       0       /* system is unusable */
-	#define LOG_ALERT       1       /* action must be taken immediately */
-	#define LOG_CRIT        2       /* critical conditions */
-	#define LOG_ERR         3       /* error conditions */
-	#define LOG_WARNING     4       /* warning conditions */
-	#define LOG_NOTICE      5       /* normal but significant condition */
-	#define LOG_INFO        6       /* informational */
-	#define LOG_DEBUG       7       /* debug-level messages */
-#endif
-
 /**********/
 /* Macros */
 /**********/
diff --git a/src/xpdev/gen_defs.h b/src/xpdev/gen_defs.h
index f8b5534f08e5c86f1f4552b221648c09aed80b15..5c67b83cc4af301ba0ba0958f81ef87a6cee3642 100644
--- a/src/xpdev/gen_defs.h
+++ b/src/xpdev/gen_defs.h
@@ -279,5 +279,21 @@ typedef struct {
 /********************************/
 #define COUNT_LIST_ITEMS(list,i)	{ i=0; if(list!=NULL) while(list[i]!=NULL) i++; }
 
+#if defined(__unix__)
+	#include <syslog.h>
+#else
+	/*
+	 * log priorities (copied from BSD syslog.h)
+	 */
+	#define LOG_EMERG       0       /* system is unusable */
+	#define LOG_ALERT       1       /* action must be taken immediately */
+	#define LOG_CRIT        2       /* critical conditions */
+	#define LOG_ERR         3       /* error conditions */
+	#define LOG_WARNING     4       /* warning conditions */
+	#define LOG_NOTICE      5       /* normal but significant condition */
+	#define LOG_INFO        6       /* informational */
+	#define LOG_DEBUG       7       /* debug-level messages */
+#endif
+
 
 #endif /* Don't add anything after this #endif statement */
diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c
index fa904b4f6c5bbba61c5c2a3cc78227fbe1f6518a..7719c1ef8cc7ae9663eec9513828d103f17983e4 100644
--- a/src/xpdev/sockwrap.c
+++ b/src/xpdev/sockwrap.c
@@ -42,7 +42,7 @@
 #include <string.h>
 
 #include "genwrap.h"	/* SLEEP */
-#include "gen_defs.h"	/* BOOL */
+#include "gen_defs.h"	/* BOOL/LOG_WARNING */
 #include "sockwrap.h"	/* sendsocket */
 #include "filewrap.h"	/* filelength */
 
@@ -230,3 +230,33 @@ BOOL socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout)
 
 	return(FALSE);
 }
+
+int retry_bind(SOCKET s, const struct sockaddr *addr, socklen_t addrlen, int retries, int wait_secs, int *(lprintf)(int level, char *fmt, ...))
+{
+	int		result=-1;
+	int		i;
+
+	for(i=0;i<=retries;i++) {
+		result = bind(s,addr,addrlen);
+		if(result != 0) {
+			if(lprintf!=NULL) {
+				if(addr->sa_family==AF_INET) {
+					lprintf(LOG_WARNING,"%04d !WARNING %d (%d) error binding socket to port %d"
+						,s, result, ERROR_VALUE,((SOCKADDR_IN *)(addr))->sin_port);
+				}
+				else {
+					lprintf(LOG_WARNING,"%04d !WARNING %d (%d) error binding socket"
+						,s, result, ERROR_VALUE);
+				}
+			}
+			if(i<retries) {
+				if(lprintf!=NULL)
+					lprintf(LOG_WARNING,"%04d Will retry in %d seconds",s ,wait_secs);
+				SLEEP(wait_secs*1000);
+			}
+		}
+		else
+			break;
+	}
+	return(result);
+}
diff --git a/src/xpdev/sockwrap.h b/src/xpdev/sockwrap.h
index eaf86a37d3ebf9c69ff67b732814b70335a28dec..c375a92ade00434a117d4cf71ce842948ebc59ae 100644
--- a/src/xpdev/sockwrap.h
+++ b/src/xpdev/sockwrap.h
@@ -155,6 +155,7 @@ extern "C" {
 int		sendfilesocket(int sock, int file, long *offset, long count);
 int		recvfilesocket(int sock, int file, long *offset, long count);
 BOOL	socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout);
+int 	retry_bind(SOCKET s, const struct sockaddr *addr, socklen_t addrlen, int retries, int wait_secs, int *(lprintf)(int level, char *fmt, ...));
 
 #ifdef __cplusplus
 }