fixed base to use close on exec options whenever creating a socket
on posix compliant systems
This commit is contained in:
@@ -46,7 +46,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
{
|
||||
static const unsigned short PORT_ANY = 0u;
|
||||
|
||||
this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
this->sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( this->sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
@@ -64,7 +64,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf (
|
||||
"%s: non blocking IO set fail because \"%s\"\n",
|
||||
__FILE__, sockErrBuf );
|
||||
@@ -84,7 +84,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close (this->sock);
|
||||
epicsSocketDestroy (this->sock);
|
||||
this->printf (
|
||||
"CAC: unable to bind to an unconstrained "
|
||||
"address because = \"%s\"\n",
|
||||
@@ -100,12 +100,12 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
if ( tmpAddr.sa.sa_family != AF_INET) {
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: UDP socket was not inet addr family\n" );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
@@ -131,7 +131,7 @@ ca_client_context::~ca_client_context ()
|
||||
( *this->fdRegFunc )
|
||||
( this->fdRegArg, this->sock, false );
|
||||
}
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
}
|
||||
|
||||
void ca_client_context::destroyChannel ( oldChannelNotify & chan )
|
||||
|
||||
+6
-6
@@ -100,7 +100,7 @@ int main ( int argc, char ** argv )
|
||||
|
||||
caStartRepeaterIfNotInstalled ( repeaterPort );
|
||||
|
||||
sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
@@ -119,7 +119,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to bind to an unconstrained address because = \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -131,7 +131,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to set socket to nonblocking state because \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -153,7 +153,7 @@ int main ( int argc, char ** argv )
|
||||
|
||||
attemptNumber++;
|
||||
if ( attemptNumber > 100 ) {
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to register with the CA repeater\n" );
|
||||
return -1;
|
||||
}
|
||||
@@ -165,7 +165,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to set socket to blocking state because \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -181,7 +181,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ("casw: error from recv was = \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
|
||||
+5
-5
@@ -115,7 +115,7 @@ static bool makeSocket ( unsigned short port, bool reuseAddr, SOCKET * pSock )
|
||||
} bd;
|
||||
int flag;
|
||||
|
||||
SOCKET sock = socket ( AF_INET, SOCK_DGRAM, 0 );
|
||||
SOCKET sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, 0 );
|
||||
if ( sock == INVALID_SOCKET ) {
|
||||
return false;
|
||||
}
|
||||
@@ -131,7 +131,7 @@ static bool makeSocket ( unsigned short port, bool reuseAddr, SOCKET * pSock )
|
||||
bd.ia.sin_port = epicsHTON16 (port);
|
||||
status = bind ( sock, &bd.sa, (int) sizeof(bd) );
|
||||
if ( status < 0 ) {
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
return false;
|
||||
}
|
||||
if (reuseAddr) {
|
||||
@@ -139,7 +139,7 @@ static bool makeSocket ( unsigned short port, bool reuseAddr, SOCKET * pSock )
|
||||
status = setsockopt ( sock, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char *) &flag, sizeof (flag) );
|
||||
if ( status < 0 ) {
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -233,7 +233,7 @@ bool repeaterClient::sendMessage ( const void *pBuf, unsigned bufSize ) // X aCC
|
||||
repeaterClient::~repeaterClient ()
|
||||
{
|
||||
if ( this->sock != INVALID_SOCKET ) {
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
}
|
||||
debugPrintf ( ( "Deleted client %u\n", epicsNTOH16 ( this->from.ia.sin_port ) ) );
|
||||
}
|
||||
@@ -302,7 +302,7 @@ bool repeaterClient::verify () // X aCC 361
|
||||
SOCKET tmpSock;
|
||||
bool success = makeSocket ( this->port (), false, & tmpSock );
|
||||
if ( success ) {
|
||||
socket_close ( tmpSock );
|
||||
epicsSocketDestroy ( tmpSock );
|
||||
}
|
||||
else {
|
||||
if ( SOCKERRNO != SOCK_EADDRINUSE ) {
|
||||
|
||||
+4
-20
@@ -457,7 +457,7 @@ tcpiiu::tcpiiu ( cac & cac, callbackMutex & cbMutex, double connectionTimeout,
|
||||
discardingPendingData ( false ),
|
||||
socketHasBeenClosed ( false )
|
||||
{
|
||||
this->sock = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
|
||||
this->sock = epicsSocketCreate ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
|
||||
if ( this->sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
@@ -677,17 +677,8 @@ void tcpiiu::initiateAbortShutdown ( epicsGuard < callbackMutex > &,
|
||||
// some complexity because we must unregister the fd early
|
||||
//
|
||||
if ( ! this->socketHasBeenClosed ) {
|
||||
int status = socket_close ( this->sock );
|
||||
if ( status ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
errlogPrintf ("CAC TCP socket close error was %s\n",
|
||||
sockErrBuf );
|
||||
}
|
||||
else {
|
||||
this->socketHasBeenClosed = true;
|
||||
}
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->socketHasBeenClosed = true;
|
||||
}
|
||||
break;
|
||||
case esscimqi_socketBothShutdownRequired:
|
||||
@@ -727,14 +718,7 @@ tcpiiu::~tcpiiu ()
|
||||
this->recvThread.exitWait ();
|
||||
|
||||
if ( ! this->socketHasBeenClosed ) {
|
||||
int status = socket_close ( this->sock );
|
||||
if ( status ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
errlogPrintf ("CAC TCP socket close error was %s\n",
|
||||
sockErrBuf );
|
||||
}
|
||||
epicsSocketDestroy ( this->sock );
|
||||
}
|
||||
|
||||
// free message body cache
|
||||
|
||||
+7
-7
@@ -103,7 +103,7 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca
|
||||
envGetInetPortConfigParam ( &EPICS_CA_SERVER_PORT,
|
||||
static_cast <unsigned short> (CA_SERVER_PORT) );
|
||||
|
||||
this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
this->sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( this->sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
@@ -154,7 +154,7 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close (this->sock);
|
||||
epicsSocketDestroy (this->sock);
|
||||
this->printf ( "CAC: unable to bind to an unconstrained address because = \"%s\"\n",
|
||||
sockErrBuf );
|
||||
throwWithLocation ( noSocket () );
|
||||
@@ -168,12 +168,12 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
if ( tmpAddr.sa.sa_family != AF_INET) {
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: UDP socket was not inet addr family\n" );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
@@ -221,7 +221,7 @@ udpiiu::~udpiiu ()
|
||||
free ( pnode );
|
||||
}
|
||||
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
}
|
||||
|
||||
void udpiiu::shutdown ()
|
||||
@@ -483,7 +483,7 @@ void epicsShareAPI caStartRepeaterIfNotInstalled ( unsigned repeaterPort )
|
||||
return;
|
||||
}
|
||||
|
||||
tmpSock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
tmpSock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( tmpSock != INVALID_SOCKET ) {
|
||||
ca_uint16_t port = static_cast < ca_uint16_t > ( repeaterPort );
|
||||
memset ( (char *) &bd, 0, sizeof ( bd ) );
|
||||
@@ -512,7 +512,7 @@ void epicsShareAPI caStartRepeaterIfNotInstalled ( unsigned repeaterPort )
|
||||
fprintf ( stderr, "caStartRepeaterIfNotInstalled () : set socket option reuseaddr set failed\n" );
|
||||
}
|
||||
|
||||
socket_close ( tmpSock );
|
||||
epicsSocketDestroy ( tmpSock );
|
||||
|
||||
if ( ! installed ) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user