From 4375ffecc6b36379e0591e5b40a9294069be9f58 Mon Sep 17 00:00:00 2001 From: Henning Kayser Date: Fri, 21 Jul 2017 17:37:07 +0200 Subject: [PATCH] Adds multiple retries to accept reverse connection We observed that the accept failed nondeterministically in rare cases. --- src/ur/server.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ur/server.cpp b/src/ur/server.cpp index be19ae0..4da9b2c 100644 --- a/src/ur/server.cpp +++ b/src/ur/server.cpp @@ -60,10 +60,14 @@ bool URServer::accept() struct sockaddr addr; socklen_t addr_len; - int client_fd = ::accept(getSocketFD(), &addr, &addr_len); + int client_fd = -1; - if (client_fd <= 0) - return false; + int retry = 0; + while((client_fd = ::accept(getSocketFD(), &addr, &addr_len)) == -1){ + ROS_ERROR_STREAM("Accepting socket connection failed. (errno: " << errno << ")"); + if(retry++ >= 5) + return false; + } setOptions(client_fd); @@ -81,4 +85,4 @@ void URServer::disconnectClient() bool URServer::write(const uint8_t* buf, size_t buf_len, size_t& written) { return client_.write(buf, buf_len, written); -} \ No newline at end of file +}