From dfeb9fd5a57ec6af75a081b39fa53a22a6aa21fd Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 6 Mar 2019 09:30:14 -0800 Subject: [PATCH] more Troubleshoot "no more data in UDP packet" --- src/remote/abstractResponseHandler.cpp | 2 +- src/remote/blockingUDPTransport.cpp | 20 +++++++++++++------- src/remoteClient/clientContextImpl.cpp | 10 +++------- src/server/responseHandlers.cpp | 7 +++---- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/remote/abstractResponseHandler.cpp b/src/remote/abstractResponseHandler.cpp index 1a494f0..f2d5f2d 100644 --- a/src/remote/abstractResponseHandler.cpp +++ b/src/remote/abstractResponseHandler.cpp @@ -42,7 +42,7 @@ void ResponseHandler::handleResponse(osiSockAddr* responseFrom, std::cerr<<"Message [0x"<getRemoteName() <<" : "<<_description<<"\n" - < #include #include +#include using namespace epics::pvData; using namespace std; @@ -267,13 +268,18 @@ void BlockingUDPTransport::run() { try { processBuffer(thisTransport, fromAddress, &_receiveBuffer); } catch(std::exception& e) { - LOG(logLevelError, - "an exception caught while in UDP receiveThread %s at %s:%d: %s", - _remoteName.c_str(), __FILE__, __LINE__, e.what()); - } catch (...) { - LOG(logLevelError, - "unknown exception caught while in UDP receiveThread %s at %s:%d.", - _remoteName.c_str(), __FILE__, __LINE__); + if(IS_LOGGABLE(logLevelError)) { + char strBuffer[64]; + sockAddrToDottedIP(&fromAddress.sa, strBuffer, sizeof(strBuffer)); + size_t epos = _receiveBuffer.getPosition(); + + // of course _receiveBuffer _may_ have been modified during processing... + _receiveBuffer.setPosition(RECEIVE_BUFFER_PRE_RESERVE); + _receiveBuffer.setLimit(RECEIVE_BUFFER_PRE_RESERVE+bytesRead); + + std::cerr<<"Error on UDP RX "< "<<_remoteName<<" at "<= (int8)m_handlerTable.size()) { - LOG(logLevelError, - "Invalid (or unsupported) command: %x.", (0xFF&command)); - - if(pvAccessIsLoggable(logLevelError)) { - std::cerr<<"Invalid PVA header "<