diff --git a/src/ca/ca_client_context.cpp b/src/ca/ca_client_context.cpp index 785bde346..91d7a6fa9 100644 --- a/src/ca/ca_client_context.cpp +++ b/src/ca/ca_client_context.cpp @@ -39,10 +39,12 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) : this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if ( this->sock == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "ca_client_context: unable to create " "datagram socket because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + sockErrBuf ); throwWithLocation ( noSocket () ); } @@ -51,10 +53,12 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) : int status = socket_ioctl ( this->sock, FIONBIO, & yes); // X aCC 392 if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( this->sock ); this->printf ( "%s: non blocking IO set fail because \"%s\"\n", - __FILE__, SOCKERRSTR ( SOCKERRNO ) ); + __FILE__, sockErrBuf ); throwWithLocation ( noSocket () ); } } @@ -69,11 +73,13 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) : addr.ia.sin_port = epicsHTON16 ( PORT_ANY ); // X aCC 818 int status = bind (this->sock, &addr.sa, sizeof (addr) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); socket_close (this->sock); this->printf ( "CAC: unable to bind to an unconstrained " "address because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + sockErrBuf ); throwWithLocation ( noSocket () ); } } @@ -83,8 +89,10 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) : osiSocklen_t saddr_length = sizeof ( tmpAddr ); int status = getsockname ( this->sock, & tmpAddr.sa, & saddr_length ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( this->sock ); - this->printf ( "CAC: getsockname () error was \"%s\"\n", SOCKERRSTR (SOCKERRNO) ); + this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf ); throwWithLocation ( noSocket () ); } if ( tmpAddr.sa.sa_family != AF_INET) { diff --git a/src/ca/casw.cpp b/src/ca/casw.cpp index aa652b1c0..f8e2a553a 100644 --- a/src/ca/casw.cpp +++ b/src/ca/casw.cpp @@ -102,8 +102,11 @@ int main ( int argc, char ** argv ) sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if ( sock == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("casw: unable to create datagram socket because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + sockErrBuf ); return -1; } @@ -113,18 +116,24 @@ int main ( int argc, char ** argv ) addr.ia.sin_port = epicsHTON16 ( 0 ); // any port status = bind ( sock, &addr.sa, sizeof (addr) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( sock ); - errlogPrintf ("casw: unable to bind to an unconstrained address because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + errlogPrintf ( "casw: unable to bind to an unconstrained address because = \"%s\"\n", + sockErrBuf ); return -1; } osiSockIoctl_t yes = true; status = socket_ioctl ( sock, FIONBIO, &yes ); // X aCC 392 if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( sock ); - errlogPrintf ("casw: unable to set socket to nonblocking state because \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + errlogPrintf ( "casw: unable to set socket to nonblocking state because \"%s\"\n", + sockErrBuf ); return -1; } @@ -153,9 +162,12 @@ int main ( int argc, char ** argv ) osiSockIoctl_t no = false; status = socket_ioctl ( sock, FIONBIO, &no ); // X aCC 392 if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( sock ); - errlogPrintf ("casw: unable to set socket to blocking state because \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + errlogPrintf ( "casw: unable to set socket to blocking state because \"%s\"\n", + sockErrBuf ); return -1; } @@ -166,9 +178,12 @@ int main ( int argc, char ** argv ) status = recvfrom ( sock, buf, sizeof ( buf ), 0, &addr.sa, &addrSize ); if ( status <= 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( sock ); errlogPrintf ("casw: error from recv was = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + sockErrBuf ); return -1; } diff --git a/src/ca/repeater.cpp b/src/ca/repeater.cpp index 94162b490..79e7f0c1b 100644 --- a/src/ca/repeater.cpp +++ b/src/ca/repeater.cpp @@ -103,64 +103,47 @@ static tsDLList < repeaterClient > client_list; static const unsigned short PORT_ANY = 0u; -typedef struct { - SOCKET sock; - int errNumber; - const char * pErrStr; -} makeSocketReturn; - /* * makeSocket() */ -static makeSocketReturn makeSocket ( unsigned short port, bool reuseAddr ) +static bool makeSocket ( unsigned short port, bool reuseAddr, SOCKET * pSock ) { int status; union { struct sockaddr_in ia; struct sockaddr sa; } bd; - makeSocketReturn msr; int flag; - msr.sock = socket ( AF_INET, SOCK_DGRAM, 0 ); - if ( msr.sock == INVALID_SOCKET ) { - msr.errNumber = SOCKERRNO; - msr.pErrStr = SOCKERRSTR (msr.errNumber); - return msr; + SOCKET sock = socket ( AF_INET, SOCK_DGRAM, 0 ); + if ( sock == INVALID_SOCKET ) { + return false; } /* * no need to bind if unconstrained */ - if (port != PORT_ANY) { + if ( port != PORT_ANY ) { memset ( (char *) &bd, 0, sizeof (bd) ); bd.ia.sin_family = AF_INET; bd.ia.sin_addr.s_addr = epicsHTON32 (INADDR_ANY); bd.ia.sin_port = epicsHTON16 (port); - status = bind ( msr.sock, &bd.sa, (int) sizeof(bd) ); + status = bind ( sock, &bd.sa, (int) sizeof(bd) ); if ( status < 0 ) { - msr.errNumber = SOCKERRNO; - msr.pErrStr = SOCKERRSTR ( msr.errNumber ); - socket_close (msr.sock); - msr.sock = INVALID_SOCKET; - return msr; + socket_close ( sock ); + return false; } if (reuseAddr) { flag = true; - status = setsockopt ( msr.sock, SOL_SOCKET, SO_REUSEADDR, + status = setsockopt ( sock, SOL_SOCKET, SO_REUSEADDR, (char *) &flag, sizeof (flag) ); if ( status < 0 ) { - int errnoCpy = SOCKERRNO; - fprintf ( stderr, "%s: set socket option failed because \"%s\"\n", - __FILE__, SOCKERRSTR(errnoCpy)); + return false; } } } - - msr.errNumber = 0; - msr.pErrStr = "no error"; - return msr; + return true; } repeaterClient::repeaterClient ( const osiSockAddr &fromIn ) : @@ -172,23 +155,23 @@ repeaterClient::repeaterClient ( const osiSockAddr &fromIn ) : bool repeaterClient::connect () { int status; - makeSocketReturn msr; - msr = makeSocket ( PORT_ANY, false ); - if ( msr.sock == INVALID_SOCKET ) { - fprintf ( stderr, "%s: no client sock because %d=\"%s\"\n", - __FILE__, msr.errNumber, msr.pErrStr ); + if ( ! makeSocket ( PORT_ANY, false, & this->sock ) ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "%s: no client sock because \"%s\"\n", + __FILE__, sockErrBuf ); return false; } - this->sock = msr.sock; - status = ::connect ( this->sock, &this->from.sa, sizeof ( this->from.sa ) ); if ( status < 0 ) { - int errnoCpy = SOCKERRNO; - + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf ( stderr, "%s: unable to connect client sock because \"%s\"\n", - __FILE__, SOCKERRSTR ( errnoCpy ) ); + __FILE__, sockErrBuf ); return false; } @@ -213,8 +196,10 @@ bool repeaterClient::sendConfirm () // X aCC 361 return false; } else { - fprintf ( stderr, "CA Repeater: confirm err was \"%s\"\n", - SOCKERRSTR (SOCKERRNO) ); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + debugPrintf ( ( "CA Repeater: confirm req err was \"%s\"\n", sockErrBuf) ); return false; } } @@ -235,7 +220,9 @@ bool repeaterClient::sendMessage ( const void *pBuf, unsigned bufSize ) // X aCC debugPrintf ( ("Client refused message %u\n", epicsNTOH16 ( this->from.ia.sin_port ) ) ); } else { - debugPrintf ( ( "CA Repeater: UDP send err was \"%s\"\n", SOCKERRSTR (errnoCpy) ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + debugPrintf ( ( "CA Repeater: UDP send err was \"%s\"\n", sockErrBuf) ); } return false; } @@ -310,19 +297,20 @@ inline bool repeaterClient::identicalPort ( const osiSockAddr &fromIn ) bool repeaterClient::verify () // X aCC 361 { - makeSocketReturn msr; - msr = makeSocket ( this->port (), false ); - if ( msr.sock != INVALID_SOCKET ) { - socket_close ( msr.sock ); + SOCKET sock; + if ( ! makeSocket ( this->port (), false, & sock ) ) { return false; } else { /* * win sock does not set SOCKERRNO when this fails */ - if ( msr.errNumber != SOCK_EADDRINUSE ) { - fprintf ( stderr, "CA Repeater: bind test err was %d=\"%s\"\n", - msr.errNumber, msr.pErrStr ); + if ( SOCKERRNO != SOCK_EADDRINUSE ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "CA Repeater: bind test err was \"%s\"\n", + sockErrBuf ); } return true; } @@ -383,9 +371,8 @@ static void fanOut ( const osiSockAddr & from, const void * pMsg, static void register_new_client ( osiSockAddr & from, tsFreeList < repeaterClient, 0x20 > & freeList ) { - int status; bool newClient = false; - makeSocketReturn msr; + int status; if ( from.sa.sa_family != AF_INET ) { return; @@ -399,13 +386,16 @@ static void register_new_client ( osiSockAddr & from, static bool init = false; if ( ! init ) { - msr = makeSocket ( PORT_ANY, true ); - if ( msr.sock == INVALID_SOCKET ) { - fprintf ( stderr, "%s: Unable to create repeater bind test socket because %d=\"%s\"\n", - __FILE__, msr.errNumber, msr.pErrStr ); + SOCKET sock; + if ( ! makeSocket ( PORT_ANY, true, & sock ) ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "%s: Unable to create repeater bind test socket because \"%s\"\n", + __FILE__, sockErrBuf ); } else { - testSock = msr.sock; + testSock = sock; } init = true; } @@ -507,7 +497,6 @@ void ca_repeater () SOCKET sock; osiSockAddr from; unsigned short port; - makeSocketReturn msr; char * pBuf; pBuf = new char [MAX_UDP_RECV]; @@ -516,26 +505,25 @@ void ca_repeater () port = envGetInetPortConfigParam ( & EPICS_CA_REPEATER_PORT, static_cast (CA_REPEATER_PORT) ); - - msr = makeSocket ( port, true ); - if ( msr.sock == INVALID_SOCKET ) { + if ( ! makeSocket ( port, true, & sock ) ) { /* * test for server was already started */ - if ( msr.errNumber == SOCK_EADDRINUSE ) { + if ( SOCKERRNO == SOCK_EADDRINUSE ) { osiSockRelease (); debugPrintf ( ( "CA Repeater: exiting because a repeater is already running\n" ) ); exit (0); } - fprintf ( stderr, "%s: Unable to create repeater socket because %d=\"%s\" - fatal\n", - __FILE__, msr.errNumber, msr.pErrStr); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "%s: Unable to create repeater socket because \"%s\" - fatal\n", + __FILE__, sockErrBuf ); osiSockRelease (); delete [] pBuf; exit(0); } - sock = msr.sock; - debugPrintf ( ( "CA Repeater: Attached and initialized\n" ) ); while ( true ) { @@ -552,8 +540,11 @@ void ca_repeater () if ( errnoCpy == SOCK_ECONNRESET ) { continue; } + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf ( stderr, "CA Repeater: unexpected UDP recv err: %s\n", - SOCKERRSTR (errnoCpy) ); + sockErrBuf ); continue; } diff --git a/src/ca/tcpiiu.cpp b/src/ca/tcpiiu.cpp index 891d852d3..eb85a352f 100644 --- a/src/ca/tcpiiu.cpp +++ b/src/ca/tcpiiu.cpp @@ -183,8 +183,11 @@ unsigned tcpiiu::sendBytes ( const void *pBuf, localError != SOCK_ETIMEDOUT && localError != SOCK_ECONNABORTED && localError != SOCK_SHUTDOWN ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->cacRef.printf ( "CAC: unexpected TCP send error: %s\n", - SOCKERRSTR ( localError ) ); + sockErrBuf ); } this->cacRef.disconnectNotify ( *this ); @@ -251,8 +254,11 @@ unsigned tcpiiu::recvBytes ( void * pBuf, unsigned nBytesInBuf ) { char name[64]; this->hostName ( name, sizeof ( name ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "Unexpected problem with circuit to CA server \"%s\" was \"%s\" - disconnecting\n", - name, SOCKERRSTR ( localErrno ) ); + name, sockErrBuf ); } this->cacRef.initiateAbortShutdown ( *this ); @@ -446,8 +452,11 @@ tcpiiu::tcpiiu ( cac & cac, callbackMutex & cbMutex, double connectionTimeout, { this->sock = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( this->sock == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "CAC: unable to create virtual circuit because \"%s\"\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); cac.releaseSmallBufferTCP ( this->pCurData ); throw std::bad_alloc (); } @@ -456,16 +465,22 @@ tcpiiu::tcpiiu ( cac & cac, callbackMutex & cbMutex, double connectionTimeout, int status = setsockopt ( this->sock, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof ( flag ) ); if ( status < 0 ) { - this->printf ("CAC: problems setting socket option TCP_NODELAY = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + this->printf ( "CAC: problems setting socket option TCP_NODELAY = \"%s\"\n", + sockErrBuf ); } flag = true; status = setsockopt ( this->sock , SOL_SOCKET, SO_KEEPALIVE, ( char * ) &flag, sizeof ( flag ) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "CAC: problems setting socket option SO_KEEPALIVE = \"%s\"\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); } // load message queue with messages informing server @@ -489,15 +504,19 @@ tcpiiu::tcpiiu ( cac & cac, callbackMutex & cbMutex, double connectionTimeout, status = setsockopt ( this->sock, SOL_SOCKET, SO_SNDBUF, ( char * ) &i, sizeof ( i ) ); if (status < 0) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ("CAC: problems setting socket option SO_SNDBUF = \"%s\"\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); } i = MAX_MSG_SIZE; status = setsockopt ( this->sock, SOL_SOCKET, SO_RCVBUF, ( char * ) &i, sizeof ( i ) ); if ( status < 0 ) { - this->printf ("CAC: problems setting socket option SO_RCVBUF = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + this->printf ( "CAC: problems setting socket option SO_RCVBUF = \"%s\"\n", + sockErrBuf ); } } # endif @@ -509,8 +528,11 @@ tcpiiu::tcpiiu ( cac & cac, callbackMutex & cbMutex, double connectionTimeout, ( char * ) &nBytes, &sizeOfParameter ); if ( status < 0 || nBytes < 0 || sizeOfParameter != static_cast < int > ( sizeof ( nBytes ) ) ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ("CAC: problems getting socket option SO_SNDBUF = \"%s\"\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); } else { this->socketLibrarySendBufferSize = static_cast < unsigned > ( nBytes ); @@ -587,8 +609,11 @@ void tcpiiu::connect () break; } else { - this->printf ( "Unable to connect because %d=\"%s\"\n", - errnoCpy, SOCKERRSTR ( errnoCpy ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + this->printf ( "Unable to connect because \"%s\"\n", + sockErrBuf ); this->cacRef.disconnectNotify ( *this ); break; } @@ -625,8 +650,11 @@ void tcpiiu::initiateAbortShutdown ( epicsGuard < callbackMutex > & cbGuard, int status = setsockopt ( this->sock, SOL_SOCKET, SO_LINGER, reinterpret_cast ( &tmpLinger ), sizeof (tmpLinger) ); if ( status != 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAC TCP socket linger set error was %s\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); } this->discardingPendingData = true; } @@ -652,8 +680,11 @@ void tcpiiu::shutdown ( epicsGuard & guard ) if ( oldState == iiucs_connected ) { int status = ::shutdown ( this->sock, SHUT_RDWR ); if ( status ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("CAC TCP socket shutdown error was %s\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); } } @@ -664,8 +695,11 @@ void tcpiiu::shutdown ( epicsGuard & guard ) // int status = socket_close ( this->sock ); if ( status ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("CAC TCP socket close error was %s\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); } // @@ -686,8 +720,11 @@ tcpiiu::~tcpiiu () if ( this->state != this->iiucs_abort_shutdown ) { int status = socket_close ( this->sock ); if ( status ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("CAC TCP socket close error was %s\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); } } @@ -1261,9 +1298,9 @@ const char * tcpiiu::pHostName () const } void tcpiiu::removeAllChannels ( - epicsGuard < callbackMutex > & cbGuard, - epicsGuard < cacMutex > & guard, - cacDisconnectChannelPrivate & dcp ) + epicsGuard < callbackMutex > & cbGuard, + epicsGuard < cacMutex > & guard, + cacDisconnectChannelPrivate & dcp ) { epicsTime currentTime = epicsTime::getCurrent (); while ( nciu *pChan = this->channelList.first() ) { @@ -1389,8 +1426,11 @@ void tcpiiu::blockUntilBytesArePendingInOS () { char name[64]; this->hostName ( name, sizeof ( name ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "Unexpected problem with circuit to CA server \"%s\" was \"%s\" - disconnecting\n", - name, SOCKERRSTR ( localErrno ) ); + name, sockErrBuf ); } this->cacRef.initiateAbortShutdown ( *this ); diff --git a/src/ca/udpiiu.cpp b/src/ca/udpiiu.cpp index 58d371523..95359f18a 100644 --- a/src/ca/udpiiu.cpp +++ b/src/ca/udpiiu.cpp @@ -105,16 +105,22 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if ( this->sock == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ("CAC: unable to create datagram socket because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + sockErrBuf ); throwWithLocation ( noSocket () ); } status = setsockopt ( this->sock, SOL_SOCKET, SO_BROADCAST, (char *) &boolValue, sizeof ( boolValue ) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ("CAC: IP broadcasting enable failed because = \"%s\"\n", - SOCKERRSTR ( SOCKERRNO ) ); + sockErrBuf ); } #if 0 @@ -129,8 +135,10 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca status = setsockopt ( this->sock, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof (size) ); if (status<0) { - this->printf ("CAC: unable to set socket option SO_RCVBUF because \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + this->printf ( "CAC: unable to set socket option SO_RCVBUF because \"%s\"\n", + sockErrBuf ); } } #endif @@ -143,9 +151,12 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca addr.ia.sin_port = epicsHTON16 (PORT_ANY); // X aCC 818 status = bind (this->sock, &addr.sa, sizeof (addr) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close (this->sock); - this->printf ("CAC: unable to bind to an unconstrained address because = \"%s\"\n", - SOCKERRSTR (SOCKERRNO)); + this->printf ( "CAC: unable to bind to an unconstrained address because = \"%s\"\n", + sockErrBuf ); throwWithLocation ( noSocket () ); } @@ -154,8 +165,11 @@ udpiiu::udpiiu ( epicsTimerQueueActive & timerQueue, callbackMutex & cbMutex, ca osiSocklen_t saddr_length = sizeof ( tmpAddr ); status = getsockname ( this->sock, &tmpAddr.sa, &saddr_length ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); socket_close ( this->sock ); - this->printf ( "CAC: getsockname () error was \"%s\"\n", SOCKERRSTR (SOCKERRNO) ); + this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf ); throwWithLocation ( noSocket () ); } if ( tmpAddr.sa.sa_family != AF_INET) { @@ -275,8 +289,11 @@ void udpiiu::recvMsg ( callbackMutex & cbMutex ) if ( errnoCpy == SOCK_ECONNRESET ) { return; } + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "CAC: UDP recv error was \"%s\"\n", - SOCKERRSTR (errnoCpy) ); + sockErrBuf ); } else if ( status > 0 ) { this->postMsg ( guard, src, this->recvBuf, @@ -417,8 +434,11 @@ void epicsShareAPI caRepeaterRegistrationMessage ( if ( errnoCpy != SOCK_EINTR && errnoCpy != SOCK_ECONNREFUSED && errnoCpy != SOCK_ECONNRESET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf ( stderr, "error sending registration message to CA repeater daemon was \"%s\"\n", - SOCKERRSTR ( errnoCpy ) ); + sockErrBuf ); } } } @@ -610,12 +630,12 @@ bool udpiiu::searchRespAction ( // X aCC 361 bool success; if ( CA_V42 ( minorVersion ) ) { - success = this->cacRef.lookupChannelAndTransferToTCP + success = this->cacRef.transferChanToVirtCircuit ( cbLocker, msg.m_available, msg.m_cid, 0xffff, 0, minorVersion, serverAddr ); } else { - success = this->cacRef.lookupChannelAndTransferToTCP + success = this->cacRef.transferChanToVirtCircuit ( cbLocker, msg.m_available, msg.m_cid, msg.m_dataType, msg.m_count, minorVersion, serverAddr ); } @@ -894,12 +914,13 @@ void udpiiu::datagramFlush ( const epicsTime & currentTime ) } else { char buf[64]; - sockAddrToDottedIP ( &pNode->addr.sa, buf, sizeof ( buf ) ); - + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); this->printf ( "CAC: error = \"%s\" sending UDP msg to %s\n", - SOCKERRSTR ( localErrno ), buf); + sockErrBuf, buf); break; } } diff --git a/src/cas/io/bsdSocket/casDGIntfIO.cc b/src/cas/io/bsdSocket/casDGIntfIO.cc index 11f1144af..788d9b824 100644 --- a/src/cas/io/bsdSocket/casDGIntfIO.cc +++ b/src/cas/io/bsdSocket/casDGIntfIO.cc @@ -128,8 +128,10 @@ casDGIntfIO::casDGIntfIO ( caServerI & serverIn, clientBufMemoryManager & memMgr char buf[64]; int errnoCpy = SOCKERRNO; ipAddrToA ( &serverAddr.ia, buf, sizeof ( buf ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errPrintf ( S_cas_bindFail, __FILE__, __LINE__, - "- bind UDP IP addr=%s failed because %s", buf, SOCKERRSTR ( errnoCpy ) ); + "- bind UDP IP addr=%s failed because %s", buf, sockErrBuf ); socket_close (this->sock); throw S_cas_bindFail; } @@ -217,9 +219,11 @@ casDGIntfIO::casDGIntfIO ( caServerI & serverIn, clientBufMemoryManager & memMgr char buf[64]; int errnoCpy = SOCKERRNO; ipAddrToA ( & serverBCastAddr.ia, buf, sizeof ( buf ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errPrintf ( S_cas_bindFail, __FILE__, __LINE__, "- bind UDP IP addr=%s failed because %s", - buf, SOCKERRSTR ( errnoCpy ) ); + buf, sockErrBuf ); socket_close ( this->sock ); socket_close ( this->bcastRecvSock ); throw S_cas_bindFail; @@ -285,8 +289,10 @@ void casDGIntfIO::xSetNonBlocking() status = socket_ioctl(this->sock, FIONBIO, &yes); // X aCC 392 if (status<0) { - errlogPrintf("%s:CAS: UDP non blocking IO set fail because \"%s\"\n", - __FILE__, SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "%s:CAS: UDP non blocking IO set fail because \"%s\"\n", + __FILE__, sockErrBuf ); } } @@ -313,8 +319,9 @@ casDGIntfIO::osdRecv ( char * pBufIn, bufSizeT size, // X aCC 361 if ( status < 0 ) { int errnoCpy = SOCKERRNO; if ( errnoCpy != SOCK_EWOULDBLOCK ) { - errlogPrintf ( "CAS: UDP recv error was %s", - SOCKERRSTR ( errnoCpy ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "CAS: UDP recv error was %s", sockErrBuf ); } } return casFillNone; @@ -358,9 +365,11 @@ casDGIntfIO::osdSend ( const char * pBufIn, bufSizeT size, // X aCC 361 if ( errnoCpy != SOCK_EWOULDBLOCK ) { char buf[64]; sockAddrToA ( & dest, buf, sizeof ( buf ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: UDP socket send to \"%s\" failed because \"%s\"\n", - buf, SOCKERRSTR(errnoCpy)); + buf, sockErrBuf ); } return outBufClient::flushNone; } @@ -374,8 +383,10 @@ bufSizeT casDGIntfIO::incomingBytesPresent () const // X aCC 361 status = socket_ioctl ( this->sock, FIONREAD, & nchars ); // X aCC 392 if ( status < 0 ) { int localError = SOCKERRNO; + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: FIONREAD failed because \"%s\"\n", - SOCKERRSTR ( localError ) ); + sockErrBuf ); return 0u; } else if ( nchars < 0 ) { @@ -402,16 +413,20 @@ void casDGIntfIO::sendBeaconIO ( char & msg, unsigned length, status = connect ( this->beaconSock, &pAddr->addr.sa, sizeof ( pAddr->addr.sa ) ); if (status<0) { ipAddrToDottedIP ( & pAddr->addr.ia, buf, sizeof ( buf ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: CA beacon routing (connect to \"%s\") error was \"%s\"\n", - __FILE__, buf, SOCKERRSTR(SOCKERRNO)); + __FILE__, buf, sockErrBuf ); } else { osiSockAddr sockAddr; osiSocklen_t size = ( osiSocklen_t ) sizeof ( sockAddr.sa ); status = getsockname ( this->beaconSock, &sockAddr.sa, &size ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: CA beacon routing (getsockname) error was \"%s\"\n", - __FILE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, sockErrBuf ); } else if ( sockAddr.sa.sa_family == AF_INET ) { addrField = sockAddr.ia.sin_addr.s_addr; @@ -419,8 +434,10 @@ void casDGIntfIO::sendBeaconIO ( char & msg, unsigned length, status = send ( this->beaconSock, &msg, length, 0 ); if ( status < 0 ) { ipAddrToA ( &pAddr->addr.ia, buf, sizeof(buf) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: CA beacon (send to \"%s\") error was \"%s\"\n", - __FILE__, buf, SOCKERRSTR(SOCKERRNO)); + __FILE__, buf, sockErrBuf ); } else { unsigned statusAsLength = static_cast < unsigned > ( status ); diff --git a/src/cas/io/bsdSocket/casIntfIO.cc b/src/cas/io/bsdSocket/casIntfIO.cc index 2e54259ae..99f254444 100644 --- a/src/cas/io/bsdSocket/casIntfIO.cc +++ b/src/cas/io/bsdSocket/casIntfIO.cc @@ -51,7 +51,9 @@ casIntfIO::casIntfIO ( const caNetAddr & addrIn ) : */ this->sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (this->sock==INVALID_SOCKET) { - printf("No socket error was %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + printf ( "No socket error was %s\n", sockErrBuf ); throw S_cas_noFD; } @@ -70,9 +72,11 @@ casIntfIO::casIntfIO ( const caNetAddr & addrIn ) : SO_REUSEADDR, (char *) &yes, sizeof (yes)); - if (status<0) { - errlogPrintf("CAS: server set SO_REUSEADDR failed? %s\n", - SOCKERRSTR(SOCKERRNO)); + if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "CAS: server set SO_REUSEADDR failed? %s\n", + sockErrBuf ); socket_close (this->sock); throw S_cas_internal; } @@ -96,13 +100,13 @@ casIntfIO::casIntfIO ( const caNetAddr & addrIn ) : } if (status<0) { char buf[64]; - int errnoCpy = SOCKERRNO; - ipAddrToA (&this->addr, buf, sizeof(buf)); - errPrintf(S_cas_bindFail, + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errPrintf ( S_cas_bindFail, __FILE__, __LINE__, "- bind TCP IP addr=%s failed because %s", - buf, SOCKERRSTR(errnoCpy)); + buf, sockErrBuf ); socket_close (this->sock); throw S_cas_bindFail; } @@ -118,8 +122,10 @@ casIntfIO::casIntfIO ( const caNetAddr & addrIn ) : reinterpret_cast ( &this->addr ), &addrSize ); if (status) { - errlogPrintf("CAS: getsockname() error %s\n", - SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "CAS: getsockname() error %s\n", + sockErrBuf ); socket_close (this->sock); throw S_cas_internal; } @@ -141,7 +147,9 @@ casIntfIO::casIntfIO ( const caNetAddr & addrIn ) : status = listen(this->sock, caServerConnectPendQueueSize); if(status < 0) { - errlogPrintf("CAS: listen() error %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "CAS: listen() error %s\n", sockErrBuf ); socket_close (this->sock); throw S_cas_internal; } @@ -176,8 +184,10 @@ casStreamOS *casIntfIO::newStreamClient ( caServerI & cas, if ( newSock == INVALID_SOCKET ) { int errnoCpy = SOCKERRNO; if ( errnoCpy != SOCK_EWOULDBLOCK && ! oneMsgFlag ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: %s accept error \"%s\"\n", - __FILE__,SOCKERRSTR ( errnoCpy ) ); + __FILE__, sockErrBuf ); oneMsgFlag = true; } return NULL; @@ -217,10 +227,12 @@ void casIntfIO::setNonBlocking() osiSockIoctl_t yes = true; status = socket_ioctl(this->sock, FIONBIO, &yes); // X aCC 392 - if (status<0) { - errlogPrintf( + if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "%s:CAS: server non blocking IO set fail because \"%s\"\n", - __FILE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, sockErrBuf ); } } diff --git a/src/cas/io/bsdSocket/casStreamIO.cc b/src/cas/io/bsdSocket/casStreamIO.cc index 188ed208c..daf02dddc 100644 --- a/src/cas/io/bsdSocket/casStreamIO.cc +++ b/src/cas/io/bsdSocket/casStreamIO.cc @@ -31,9 +31,11 @@ casStreamIO::casStreamIO ( caServerI & cas, clientBufMemoryManager & bufMgr, status = setsockopt ( this->sock, IPPROTO_TCP, TCP_NODELAY, ( char * ) & yes, sizeof ( yes ) ); if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: %s TCP_NODELAY option set failed %s\n", - __FILE__, SOCKERRSTR(SOCKERRNO) ); + __FILE__, sockErrBuf ); throw S_cas_internal; } @@ -44,9 +46,11 @@ casStreamIO::casStreamIO ( caServerI & cas, clientBufMemoryManager & bufMgr, status = setsockopt ( sock, SOL_SOCKET, SO_KEEPALIVE, (char *) & yes, sizeof ( yes ) ); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: %s SO_KEEPALIVE option set failed %s\n", - __FILE__, SOCKERRSTR(SOCKERRNO) ); + __FILE__, sockErrBuf ); throw S_cas_internal; } @@ -125,10 +129,11 @@ outBufClient::flushCondition casStreamIO::osdSend ( const char *pInBuf, bufSizeT char buf[64]; ipAddrToA (&this->addr, buf, sizeof(buf)); - - errlogPrintf( + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "CAS: TCP socket send to \"%s\" failed because \"%s\"\n", - buf, SOCKERRSTR(errnoCpy)); + buf, sockErrBuf ); } return outBufClient::flushDisconnect; } @@ -165,9 +170,11 @@ casStreamIO::osdRecv ( char * pInBuf, bufSizeT nBytes, // X aCC 361 myerrno != SOCK_EPIPE && myerrno != SOCK_ETIMEDOUT ) { ipAddrToA (&this->addr, buf, sizeof(buf)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf( "CAS: client %s disconnected because \"%s\"\n", - buf, SOCKERRSTR(myerrno)); + buf, sockErrBuf ); } return casFillDisconnect; } @@ -185,8 +192,10 @@ void casStreamIO::forceDisconnect () this->sockHasBeenClosed = true; int status = ::shutdown ( this->sock, SHUT_RDWR ); if ( status ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("CAC TCP socket shutdown error was %s\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); } socket_close ( this->sock ); // other wakeup will be required here when we @@ -219,8 +228,10 @@ void casStreamIO::xSetNonBlocking() this->blockingFlag = xIsntBlocking; } else { - errlogPrintf("%s:CAS: TCP non blocking IO set fail because \"%s\"\n", - __FILE__, SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ( "%s:CAS: TCP non blocking IO set fail because \"%s\"\n", + __FILE__, sockErrBuf ); throw S_cas_internal; } } @@ -247,11 +258,11 @@ bufSizeT casStreamIO::incomingBytesPresent () const // X aCC 361 localError != SOCK_ETIMEDOUT ) { char buf[64]; - int errnoCpy = SOCKERRNO; - ipAddrToA ( &this->addr, buf, sizeof(buf) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ("CAS: FIONREAD for %s failed because \"%s\"\n", - buf, SOCKERRSTR ( errnoCpy ) ); + buf, sockErrBuf ); } return 0u; } diff --git a/src/libCom/fdmgr/fdManager.cpp b/src/libCom/fdmgr/fdManager.cpp index 0cbd5369a..0835f3824 100644 --- a/src/libCom/fdmgr/fdManager.cpp +++ b/src/libCom/fdmgr/fdManager.cpp @@ -183,10 +183,13 @@ epicsShareFunc void fdManager::process (double delay) // // print a message if its an unexpected error // - if (errnoCpy != SOCK_EINTR) { - fprintf(stderr, + if ( errnoCpy != SOCK_EINTR ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "fdManager: select failed because \"%s\"\n", - SOCKERRSTR(errnoCpy)); + sockErrBuf ); } } } diff --git a/src/libCom/logClient/logClient.c b/src/libCom/logClient/logClient.c index ba01b1023..5e5417d8b 100644 --- a/src/libCom/logClient/logClient.c +++ b/src/libCom/logClient/logClient.c @@ -274,10 +274,13 @@ LOCAL void logClientMakeSock (logClient *pClient) /* * allocate a socket */ - pClient->sock = socket (AF_INET, SOCK_STREAM, 0); - if (pClient->sock == INVALID_SOCKET){ - fprintf (stderr, "log client: no socket error %s\n", - SOCKERRSTR(SOCKERRNO)); + pClient->sock = socket ( AF_INET, SOCK_STREAM, 0 ); + if ( pClient->sock == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf ( stderr, "log client: no socket error %s\n", + sockErrBuf ); epicsMutexUnlock (pClient->mutex); return; } @@ -285,8 +288,11 @@ LOCAL void logClientMakeSock (logClient *pClient) optval = TRUE; status = socket_ioctl (pClient->sock, FIONBIO, &optval); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf (stderr, "%s:%d ioctl FBIO client er %s\n", - __FILE__, __LINE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, __LINE__, sockErrBuf); socket_close (pClient->sock); pClient->sock = INVALID_SOCKET; epicsMutexUnlock (pClient->mutex); @@ -349,9 +355,12 @@ LOCAL void logClientConnect (logClient *pClient) ipAddrToDottedIP (&pClient->addr, name, sizeof(name)); if (pClient->connectReset==0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf (stderr, "log client: Unable to connect to \"%s\" because %d=\"%s\"\n", - name, errnoCpy, SOCKERRSTR(errnoCpy)); + name, errnoCpy, sockErrBuf); } logClientReset (pClient); @@ -366,8 +375,11 @@ LOCAL void logClientConnect (logClient *pClient) optval = FALSE; status = socket_ioctl (pClient->sock, FIONBIO, &optval); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); fprintf (stderr, "%s:%d ioctl FIONBIO log client error was \"%s\"\n", - __FILE__, __LINE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, __LINE__, sockErrBuf); logClientReset (pClient); return; } @@ -379,7 +391,10 @@ LOCAL void logClientConnect (logClient *pClient) optval = TRUE; status = setsockopt (pClient->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)); if (status<0) { - fprintf (stderr, "log client: unable to enable keepalive option because \"%s\"\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf (stderr, "log client: unable to enable keepalive option because \"%s\"\n", sockErrBuf); } /* @@ -395,7 +410,10 @@ LOCAL void logClientConnect (logClient *pClient) lingerval.l_linger = 60*5; status = setsockopt (pClient->sock, SOL_SOCKET, SO_LINGER, (char *) &lingerval, sizeof(lingerval)); if (status<0) { - fprintf (stderr, "log client: unable to set linger options because \"%s\"\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf (stderr, "log client: unable to set linger options because \"%s\"\n", sockErrBuf); } } diff --git a/src/libCom/osi/os/Darwin/osdSock.h b/src/libCom/osi/os/Darwin/osdSock.h index 27a1d19ea..ff375f3bf 100644 --- a/src/libCom/osi/os/Darwin/osdSock.h +++ b/src/libCom/osi/os/Darwin/osdSock.h @@ -48,8 +48,6 @@ typedef int osiSocklen_t; #define FD_IN_FDSET(FD) ((FD) formatLength ) { + sprintf ( pBuf, pFormat, + bufSize - formatLength, theSockError ); + } + else { + strncpy ( pBuf, "WINSOCK Error", bufSize ); + pBuf [bufSize - 0] = '\0'; + } } - return errString; -#else - sprintf (errString, "WIN32 Socket Library Error %d", errnoIn); - return errString; -#endif } diff --git a/src/libCom/osi/os/WIN32/osdSock.h b/src/libCom/osi/os/WIN32/osdSock.h index 1821d6ae6..d0c19d11e 100644 --- a/src/libCom/osi/os/WIN32/osdSock.h +++ b/src/libCom/osi/os/WIN32/osdSock.h @@ -30,7 +30,6 @@ extern "C" { #endif #define SOCKERRNO WSAGetLastError() -#define SOCKERRSTR(ERRNO_IN) convertSocketErrorToString(ERRNO_IN) #define socket_close(S) closesocket(S) #define socket_ioctl(A,B,C) ioctlsocket(A,B,C) diff --git a/src/libCom/osi/os/alpha/osdSock.h b/src/libCom/osi/os/alpha/osdSock.h index 89ef1dde6..4bbbdb0c3 100644 --- a/src/libCom/osi/os/alpha/osdSock.h +++ b/src/libCom/osi/os/alpha/osdSock.h @@ -43,7 +43,6 @@ struct ifafilt; typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/cygwin32/osdSock.h b/src/libCom/osi/os/cygwin32/osdSock.h index cffef9a27..ef680062b 100644 --- a/src/libCom/osi/os/cygwin32/osdSock.h +++ b/src/libCom/osi/os/cygwin32/osdSock.h @@ -38,7 +38,6 @@ extern "C" { typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/default/osdNetIntf.c b/src/libCom/osi/os/default/osdNetIntf.c index aad7d9894..68b12cced 100644 --- a/src/libCom/osi/os/default/osdNetIntf.c +++ b/src/libCom/osi/os/default/osdNetIntf.c @@ -243,9 +243,12 @@ epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr (SOCKET socket) ifconf.ifc_req = pIfreqList; status = socket_ioctl ( socket, SIOCGIFCONF, &ifconf ); if ( status < 0 || ifconf.ifc_len == 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "osiLocalAddr(): SIOCGIFCONF ioctl failed because \"%s\"\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); free ( pIfreqList ); return addr; } diff --git a/src/libCom/osi/os/default/osdSock.c b/src/libCom/osi/os/default/osdSock.c index 7d0612dd4..812742310 100644 --- a/src/libCom/osi/os/default/osdSock.c +++ b/src/libCom/osi/os/default/osdSock.c @@ -19,6 +19,7 @@ #include #include #include +#include #define epicsExportSharedSymbols #include "epicsThread.h" @@ -114,4 +115,18 @@ epicsShareFunc int epicsShareAPI hostToIPAddr return ret; } +/* + * convertSocketErrorToString() + */ +epicsShareFunc void epicsShareAPI convertSocketErrorToString ( + char * pBuf, unsigned bufSize ) +{ + if ( ! bufSize ) { + return; + } + strncpy ( pBuf, strerror ( SOCKERRNO ), bufSize ); + pBuf[bufSize-1] = '\0'; +} + + diff --git a/src/libCom/osi/os/hpux/osdSock.h b/src/libCom/osi/os/hpux/osdSock.h index f85619c4f..eccf1b7cf 100644 --- a/src/libCom/osi/os/hpux/osdSock.h +++ b/src/libCom/osi/os/hpux/osdSock.h @@ -41,7 +41,6 @@ extern "C" { typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/sgi/osdSock.h b/src/libCom/osi/os/sgi/osdSock.h index b654b9cc5..3a9cfa0e8 100644 --- a/src/libCom/osi/os/sgi/osdSock.h +++ b/src/libCom/osi/os/sgi/osdSock.h @@ -42,7 +42,6 @@ extern "C" { typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/solaris/osdSock.h b/src/libCom/osi/os/solaris/osdSock.h index 865a2c93b..ae4ce58f6 100644 --- a/src/libCom/osi/os/solaris/osdSock.h +++ b/src/libCom/osi/os/solaris/osdSock.h @@ -42,7 +42,6 @@ extern "C" { typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/sun4/osdSock.h b/src/libCom/osi/os/sun4/osdSock.h index fe6b356be..0a1fbe4b1 100644 --- a/src/libCom/osi/os/sun4/osdSock.h +++ b/src/libCom/osi/os/sun4/osdSock.h @@ -111,7 +111,6 @@ int gethostname (char *name, int namelen); typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #define socket_ioctl(A,B,C) ioctl(A,B,C) typedef int osiSockIoctl_t; diff --git a/src/libCom/osi/os/vxWorks/osdSock.h b/src/libCom/osi/os/vxWorks/osdSock.h index 11b1f0a4a..61bf6379b 100644 --- a/src/libCom/osi/os/vxWorks/osdSock.h +++ b/src/libCom/osi/os/vxWorks/osdSock.h @@ -43,7 +43,6 @@ int sysClkRateGet(void); typedef int SOCKET; #define INVALID_SOCKET (-1) #define SOCKERRNO errno -#define SOCKERRSTR(ERRNO_IN) (strerror(ERRNO_IN)) #define socket_close(S) close(S) #ifndef SHUT_RDWR # define SHUT_RDWR 2 diff --git a/src/libCom/osi/osiSock.h b/src/libCom/osi/osiSock.h index a2258e770..b55b6a595 100644 --- a/src/libCom/osi/osiSock.h +++ b/src/libCom/osi/osiSock.h @@ -98,7 +98,9 @@ epicsShareFunc void epicsShareAPI osiSockRelease (void); /* * convert socket error number to a string */ -epicsShareFunc const char * epicsShareAPI convertSocketErrorToString (int errnoIn); +epicsShareFunc void epicsShareAPI convertSocketErrorToString ( + char * pBuf, unsigned bufSize ); + #ifdef __cplusplus } diff --git a/src/rsrv/camsgtask.c b/src/rsrv/camsgtask.c index b793d746c..c57a854df 100644 --- a/src/rsrv/camsgtask.c +++ b/src/rsrv/camsgtask.c @@ -130,8 +130,11 @@ void camsgtask ( void *pParm ) */ status = socket_ioctl (client->sock, FIONREAD, &nchars); if (status < 0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf("CAS: io ctl err - %s\n", - SOCKERRSTR(SOCKERRNO)); + sockErrBuf); cas_send_bs_msg(client, TRUE); } else if (nchars == 0){ diff --git a/src/rsrv/caserverio.c b/src/rsrv/caserverio.c index 35742cfd9..00f2656eb 100644 --- a/src/rsrv/caserverio.c +++ b/src/rsrv/caserverio.c @@ -88,10 +88,12 @@ void cas_send_bs_msg ( struct client *pclient, int lock_needed ) anerrno!=SOCK_EPIPE&& anerrno!=SOCK_ETIMEDOUT)|| CASDEBUG>2){ - + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: TCP send to \"%s\" failed because \"%s\"\n", - buf, SOCKERRSTR(anerrno)); + buf, sockErrBuf); } pclient->disconnect = TRUE; pclient->send.stk = 0u; @@ -156,16 +158,16 @@ void cas_send_dg_msg ( struct client * pclient ) } } else { - int anerrno = SOCKERRNO; - char buf[64]; - + char sockErrBuf[64]; + char buf[128]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); ipAddrToDottedIP ( &pclient->addr, buf, sizeof(buf) ); - errlogPrintf( "CAS: UDP send to \"%s\" " "failed because \"%s\"\n", - (int)buf, - (int)SOCKERRSTR(anerrno)); + buf, + sockErrBuf); } pclient->send.stk = 0u; diff --git a/src/rsrv/caservertask.c b/src/rsrv/caservertask.c index 4627525fe..898d71247 100644 --- a/src/rsrv/caservertask.c +++ b/src/rsrv/caservertask.c @@ -107,10 +107,12 @@ LOCAL void req_server (void *pParm) status = setsockopt ( IOC_sock, SOL_SOCKET, SO_REUSEADDR, (char *) &flag, sizeof (flag) ); if ( status < 0 ) { - int errnoCpy = SOCKERRNO; + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: set socket option SO_REUSEADDR failed because \"%s\"\n", - __FILE__, SOCKERRSTR (errnoCpy) ); + __FILE__, sockErrBuf ); } } # endif @@ -135,8 +137,11 @@ LOCAL void req_server (void *pParm) (struct sockaddr *) &serverAddr, sizeof ( serverAddr ) ); } if ( status < 0 ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: Socket bind error was \"%s\"\n", - SOCKERRSTR (SOCKERRNO) ); + sockErrBuf ); epicsThreadSuspendSelf (); } portChange = 1; @@ -149,8 +154,11 @@ LOCAL void req_server (void *pParm) status = getsockname ( IOC_sock, (struct sockaddr *)&serverAddr, &addrSize); if ( status ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "CAS: getsockname() error %s\n", - SOCKERRSTR(SOCKERRNO) ); + sockErrBuf ); epicsThreadSuspendSelf (); } @@ -189,8 +197,11 @@ LOCAL void req_server (void *pParm) osiSocklen_t addLen = sizeof(sockAddr); if ( ( clientSock = accept ( IOC_sock, &sockAddr, &addLen ) ) == INVALID_SOCKET ) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf("CAS: Client accept error was \"%s\"\n", - (int) SOCKERRSTR(SOCKERRNO)); + sockErrBuf ); epicsThreadSleep(15.0); continue; } diff --git a/src/rsrv/cast_server.c b/src/rsrv/cast_server.c index c89380cd1..01599fc58 100644 --- a/src/rsrv/cast_server.c +++ b/src/rsrv/cast_server.c @@ -181,10 +181,12 @@ void cast_server(void *pParm) status = setsockopt ( IOC_cast_sock, SOL_SOCKET, SO_REUSEADDR, (char *) &flag, sizeof (flag) ); if ( status < 0 ) { - int errnoCpy = SOCKERRNO; + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: set socket option SO_REUSEADDR failed because \"%s\"\n", - __FILE__, SOCKERRSTR (errnoCpy) ); + __FILE__, sockErrBuf ); } } @@ -196,7 +198,10 @@ void cast_server(void *pParm) /* get server's Internet address */ if( bind(IOC_cast_sock, (struct sockaddr *)&sin, sizeof (sin)) < 0){ - epicsPrintf ("CAS: UDP server port bind error was \"%s\"\n", SOCKERRSTR ( SOCKERRNO ) ); + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + epicsPrintf ("CAS: UDP server port bind error was \"%s\"\n", sockErrBuf ); socket_close (IOC_cast_sock); epicsThreadSuspendSelf (); } @@ -205,10 +210,12 @@ void cast_server(void *pParm) status = setsockopt ( IOC_cast_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag) ); if ( status < 0 ) { - int errnoCpy = SOCKERRNO; + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: set socket option SO_REUSEADDR failed because \"%s\"\n", - __FILE__, SOCKERRSTR (errnoCpy) ); + __FILE__, sockErrBuf ); } tbs = epicsThreadHighestPriorityLevelBelow ( priorityOfSelf, &priorityOfBeacon ); @@ -252,8 +259,11 @@ void cast_server(void *pParm) (struct sockaddr *)&new_recv_addr, &recv_addr_size); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); epicsPrintf ("CAS: UDP recv error (errno=%s)\n", - SOCKERRSTR(SOCKERRNO)); + sockErrBuf); epicsThreadSleep(1.0); } else { diff --git a/src/rsrv/online_notify.c b/src/rsrv/online_notify.c index 9b43705c0..f39c48b65 100644 --- a/src/rsrv/online_notify.c +++ b/src/rsrv/online_notify.c @@ -209,9 +209,12 @@ void rsrv_online_notify_task(void *pParm) status = connect (sock, &pNode->addr.sa, sizeof(pNode->addr.sa)); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); ipAddrToDottedIP (&pNode->addr.ia, buf, sizeof(buf)); errlogPrintf ( "%s: CA beacon routing (connect to \"%s\") error was \"%s\"\n", - __FILE__, buf, SOCKERRSTR(SOCKERRNO)); + __FILE__, buf, sockErrBuf); } else { struct sockaddr_in if_addr; @@ -219,8 +222,10 @@ void rsrv_online_notify_task(void *pParm) osiSocklen_t size = sizeof (if_addr); status = getsockname (sock, (struct sockaddr *) &if_addr, &size); if (status<0) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: CA beacon routing (getsockname) error was \"%s\"\n", - __FILE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, sockErrBuf); } else if (if_addr.sin_family==AF_INET) { msg.m_available = if_addr.sin_addr.s_addr; @@ -228,9 +233,11 @@ void rsrv_online_notify_task(void *pParm) status = send (sock, (char *)&msg, sizeof(msg), 0); if (status < 0) { + char sockErrBuf[64]; ipAddrToDottedIP (&pNode->addr.ia, buf, sizeof(buf)); + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); errlogPrintf ( "%s: CA beacon (send to \"%s\") error was \"%s\"\n", - __FILE__, buf, SOCKERRSTR(SOCKERRNO)); + __FILE__, buf, sockErrBuf); } else { assert (status == sizeof(msg)); diff --git a/src/util/iocLogServer.c b/src/util/iocLogServer.c index 16af69718..ca3e29b90 100644 --- a/src/util/iocLogServer.c +++ b/src/util/iocLogServer.c @@ -130,7 +130,9 @@ int main() */ pserver->sock = socket(AF_INET, SOCK_STREAM, 0); if (pserver->sock==INVALID_SOCKET) { - fprintf(stderr, "iocLogServer: sock create err: %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf(stderr, "iocLogServer: sock create err: %s\n", sockErrBuf); return IOCLS_ERROR; } @@ -149,7 +151,9 @@ int main() (char *) &optval, sizeof(optval)); if(status<0){ - fprintf(stderr, "iocLogServer: setsockopt err %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf(stderr, "iocLogServer: setsockopt err %s\n", sockErrBuf); return IOCLS_ERROR; } # endif @@ -164,7 +168,9 @@ int main() (struct sockaddr *)&serverAddr, sizeof (serverAddr) ); if (status<0) { - fprintf(stderr, "iocLogServer: bind err: %s\n", SOCKERRSTR(SOCKERRNO) ); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf(stderr, "iocLogServer: bind err: %s\n", sockErrBuf ); fprintf (stderr, "iocLogServer: a server is already installed on port %u?\n", (unsigned)ioc_log_port); @@ -174,7 +180,9 @@ int main() /* listen and accept new connections */ status = listen(pserver->sock, 10); if (status<0) { - fprintf(stderr, "iocLogServer: listen err %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf(stderr, "iocLogServer: listen err %s\n", sockErrBuf); return IOCLS_ERROR; } @@ -188,7 +196,9 @@ int main() FIONBIO, &optval); if(status<0){ - fprintf(stderr, "iocLogServer: ioctl FIONBIO err %s\n", SOCKERRSTR(SOCKERRNO)); + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); + fprintf(stderr, "iocLogServer: ioctl FIONBIO err %s\n", sockErrBuf); return IOCLS_ERROR; } @@ -463,8 +473,10 @@ static void acceptNewClient ( void *pParam ) FIONBIO, &optval); if(status<0){ + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); fprintf(stderr, "%s:%d ioctl FBIO client er %s\n", - __FILE__, __LINE__, SOCKERRSTR(SOCKERRNO)); + __FILE__, __LINE__, sockErrBuf); socket_close(pclient->insock); free(pclient); return; @@ -509,8 +521,10 @@ static void acceptNewClient ( void *pParam ) # define SOCKET_SHUTDOWN_WRITE_SIDE 1 status = shutdown(pclient->insock, SOCKET_SHUTDOWN_WRITE_SIDE); if(status<0){ + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); fprintf (stderr, "%s:%d shutdown err %s\n", __FILE__, __LINE__, - SOCKERRSTR(SOCKERRNO)); + sockErrBuf); socket_close(pclient->insock); free(pclient); @@ -564,10 +578,12 @@ static void readFromClient(void *pParam) errnoCpy != SOCK_EPIPE && errnoCpy != SOCK_ETIMEDOUT ) { + char sockErrBuf[64]; + convertSocketErrorToString ( sockErrBuf, sizeof ( sockErrBuf ) ); fprintf(stderr, "%s:%d socket=%d size=%d read error=%s\n", __FILE__, __LINE__, pclient->insock, - size, SOCKERRSTR(errnoCpy)); + size, sockErrBuf); } } /*