diff --git a/src/cpp/transport/UDPTransportInterface.cpp b/src/cpp/transport/UDPTransportInterface.cpp index 3c914cb0..8a8bc713 100644 --- a/src/cpp/transport/UDPTransportInterface.cpp +++ b/src/cpp/transport/UDPTransportInterface.cpp @@ -380,12 +380,15 @@ void UDPTransportInterface::performListenOperation(UDPChannelResource* pChannelR { Locator_t remoteLocator; - while (pChannelResource->IsAlive()) + int tries=0; + while (pChannelResource->IsAlive() && tries < 100) { // Blocking receive. auto& msg = pChannelResource->GetMessageBuffer(); if (!Receive(pChannelResource, msg.buffer, msg.max_size, msg.length, remoteLocator)) { + ++tries; + std::cout<getSocket()->set_option(asio::detail::socket_option::integer{ 200 }); + size_t bytes = pChannelResource->getSocket()->receive_from(asio::buffer(receiveBuffer, receiveBufferCapacity), senderEndpoint); receiveBufferSize = static_cast(bytes); if (receiveBufferSize > 0) { if (receiveBufferSize == 13 && memcmp(receiveBuffer, "EPRORTPSCLOSE", 13) == 0) { + pChannelResource->Disable(); return false; } EndpointToLocator(senderEndpoint, remoteLocator);