diff --git a/modules/ca/src/client/udpiiu.cpp b/modules/ca/src/client/udpiiu.cpp index 00d764d7c..1bcb03716 100644 --- a/modules/ca/src/client/udpiiu.cpp +++ b/modules/ca/src/client/udpiiu.cpp @@ -961,7 +961,7 @@ bool udpiiu::pushDatagramMsg ( epicsGuard < epicsMutex > & guard, udpiiu :: SearchDestUDP :: SearchDestUDP ( const osiSockAddr & destAddr, udpiiu & udpiiuIn ) : - _destAddr ( destAddr ), _udpiiu ( udpiiuIn ) + _lastError (0u), _destAddr ( destAddr ), _udpiiu ( udpiiuIn ) { } @@ -976,6 +976,13 @@ void udpiiu :: SearchDestUDP :: searchRequest ( int status = sendto ( _udpiiu.sock, const_cast(pBuf), bufSizeAsInt, 0, & _destAddr.sa, sizeof ( _destAddr.sa ) ); if ( status == bufSizeAsInt ) { + if ( _lastError ) { + char buf[64]; + sockAddrToDottedIP ( &_destAddr.sa, buf, sizeof ( buf ) ); + errlogPrintf ( + "CAC: ok sending UDP msg to %s\n", buf); + } + _lastError = 0; break; } if ( status >= 0 ) { @@ -1002,7 +1009,9 @@ void udpiiu :: SearchDestUDP :: searchRequest ( else if ( localErrno == SOCK_EBADF ) { break; } - else { + else if ( localErrno == _lastError) { + break; + } else { char sockErrBuf[64]; epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) ); @@ -1011,6 +1020,8 @@ void udpiiu :: SearchDestUDP :: searchRequest ( errlogPrintf ( "CAC: error = \"%s\" sending UDP msg to %s\n", sockErrBuf, buf); + + _lastError = localErrno; break; } } diff --git a/modules/ca/src/client/udpiiu.h b/modules/ca/src/client/udpiiu.h index 6b41e38ed..fdf348296 100644 --- a/modules/ca/src/client/udpiiu.h +++ b/modules/ca/src/client/udpiiu.h @@ -123,6 +123,7 @@ private: void show ( epicsGuard < epicsMutex > &, unsigned level ) const; private: + int _lastError; osiSockAddr _destAddr; udpiiu & _udpiiu; };