From b74c67c0f3cbf35744b15e7f9fe5756853a339c1 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Wed, 3 Nov 2004 03:24:39 +0000 Subject: [PATCH] Move LOG_* into xpdev/gen_defs.h Add retry_bind() function (exteded bind() function that will retry a number of times) --- src/sbbs3/sbbsdefs.h | 16 ---------------- src/xpdev/gen_defs.h | 16 ++++++++++++++++ src/xpdev/sockwrap.c | 32 +++++++++++++++++++++++++++++++- src/xpdev/sockwrap.h | 1 + 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index c0375988ff..6373dd1e8e 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 f8b5534f08..5c67b83cc4 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 fa904b4f6c..7719c1ef8c 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 eaf86a37d3..c375a92ade 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 } -- GitLab