Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
xinetd
xinetd-2.3.14-retry-binds.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xinetd-2.3.14-retry-binds.patch of Package xinetd
Index: xinetd-2.3.14/xinetd/service.c =================================================================== --- xinetd-2.3.14.orig/xinetd/service.c +++ xinetd-2.3.14/xinetd/service.c @@ -232,6 +232,8 @@ static status_e activate_rpc( struct ser #endif /* ! NO_RPC */ +#define MAX_BIND_ATTEMPTS 10 + static status_e activate_normal( struct service *sp ) { union xsockaddr tsin; @@ -242,10 +244,21 @@ static status_e activate_normal( struct const char *func = "activate_normal" ; unsigned int sin_len = sizeof(tsin); int on = 1; + int retries = MAX_BIND_ATTEMPTS; + useconds_t bind_retry_delay= 0; + char *brd_str = NULL; #ifdef IPV6_V6ONLY int v6on = 0; #endif + brd_str = getenv("XINETD_BIND_DELAY"); + if (brd_str) { + bind_retry_delay = atoi(brd_str); + if (bind_retry_delay < 0 || bind_retry_delay > 500000) { + bind_retry_delay = 0; + } + } + if( SC_BIND_ADDR(scp) != NULL ) memcpy(&tsin, SC_BIND_ADDR(scp), sin_len); else @@ -295,10 +308,18 @@ static status_e activate_normal( struct "setsockopt SO_KEEPALIVE failed (%m). service = %s", sid ) ; } - if ( bind( sd, &tsin.sa, sin_len ) == -1 ) + while ( bind( sd, &tsin.sa, sin_len ) == -1 ) { msg( LOG_ERR, func, "bind failed (%m). service = %s", sid ) ; - return( FAILED ) ; + if (retries-- > 0) { + msg( LOG_NOTICE, func, + "bind retry attempt %i", MAX_BIND_ATTEMPTS - retries); + if (bind_retry_delay) { + usleep(bind_retry_delay); + } + } else { + return( FAILED ) ; + } } #ifdef IN_MULTICAST
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor