UDP port reuse fixed

This commit is contained in:
Matej Sekoranja
2011-01-19 10:52:06 +01:00
parent 91c2851b30
commit 4c49c498c9

View File

@@ -37,32 +37,23 @@ namespace epics {
errStr);
}
int optval = _broadcast ? true : false;
int optval = _broadcast ? 1 : 0;
int retval = ::setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &optval,
sizeof(optval));
if(retval<0) errlogSevPrintf(errlogMajor,
"Error setting SO_BROADCAST: %s", strerror(errno));
printf("_broadcast: %d\n", _broadcast);
// set the socket options
//if (_reuseSocket)
// epicsSocketEnableAddressUseForDatagramFanout(socket);
optval = _reuseSocket ? true : false;
retval = ::setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &optval,
if (_reuseSocket)
epicsSocketEnableAddressUseForDatagramFanout(socket);
/*
optval = _reuseSocket ? 1 : 0;
// or SO_REUSEADDR, OS dependant
retval = ::setsockopt(socket, SOL_SOCKET, SO_REUSEPORT, &optval,
sizeof(optval));
if(retval<0) errlogSevPrintf(errlogMajor,
"Error setting SO_REUSEADDR: %s", strerror(errno));
printf("_reuseSocket: %d\n", _reuseSocket);
/* from MSDN:
* Note: If the setsockopt function is called before the bind
* function, TCP/IP options will not be checked by using TCP/IP
* until the bind occurs. In this case, the setsockopt function
* call will always succeed, but the bind function call can fail
* because of an early setsockopt call failing.
*/
// still we need to set SO_REUSEADDR befire bind
*/
retval = ::bind(socket, (sockaddr*)&(bindAddress.sa),
sizeof(sockaddr));