moved listen into rsrv_grab_tcp to allow retry if failed
Fixes race condition with multiple IOCs starting simultaneously.
This commit is contained in:
committed by
Michael Davidsaver
parent
983937a52f
commit
4844fbbd82
@@ -66,17 +66,6 @@ static void req_server (void *pParm)
|
||||
|
||||
IOC_sock = conf->tcp;
|
||||
|
||||
/* listen and accept new connections */
|
||||
if ( listen ( IOC_sock, 20 ) < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
errlogPrintf ( "CAS: Listen error: %s\n",
|
||||
sockErrBuf );
|
||||
epicsSocketDestroy (IOC_sock);
|
||||
epicsThreadSuspendSelf ();
|
||||
}
|
||||
|
||||
epicsEventSignal(castcp_startStopEvent);
|
||||
|
||||
while (TRUE) {
|
||||
@@ -194,7 +183,7 @@ SOCKET* rsrv_grab_tcp(unsigned short *port)
|
||||
|
||||
epicsSocketEnableAddressReuseDuringTimeWaitState ( tcpsock );
|
||||
|
||||
if(bind(tcpsock, &scratch.sa, sizeof(scratch))==0) {
|
||||
if(bind(tcpsock, &scratch.sa, sizeof(scratch))==0 && listen(tcpsock, 20)==0) {
|
||||
if(scratch.ia.sin_port==0) {
|
||||
/* use first socket to pick a random port */
|
||||
osiSocklen_t alen = sizeof(ifaceAddr);
|
||||
|
||||
Reference in New Issue
Block a user