fixed base to use close on exec options whenever creating a socket

on posix compliant systems
This commit is contained in:
Jeff Hill
2003-07-16 17:45:09 +00:00
parent a907bc4df3
commit b697fc2acc
30 changed files with 170 additions and 131 deletions
+6 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 ) {