From dbcf8aeb4102978528249a7cd28d0e8e269fc316 Mon Sep 17 00:00:00 2001 From: Simon Rasmussen Date: Fri, 21 Jul 2017 19:01:57 +0200 Subject: [PATCH] Fixed SO_REUSEADDR being set after bind rather than before --- include/ur_modern_driver/ur/server.h | 6 +----- src/ur/server.cpp | 18 +++++++++--------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/ur_modern_driver/ur/server.h b/include/ur_modern_driver/ur/server.h index f236b96..c240ba5 100644 --- a/include/ur_modern_driver/ur/server.h +++ b/include/ur_modern_driver/ur/server.h @@ -15,11 +15,7 @@ private: TCPSocket client_; protected: - virtual bool open(int socket_fd, struct sockaddr *address, size_t address_len) - { - return ::bind(socket_fd, address, address_len) == 0; - } - virtual void setOptions(int socket_fd); + virtual bool open(int socket_fd, struct sockaddr *address, size_t address_len); public: URServer(int port); diff --git a/src/ur/server.cpp b/src/ur/server.cpp index be19ae0..e2f7b22 100644 --- a/src/ur/server.cpp +++ b/src/ur/server.cpp @@ -14,14 +14,6 @@ URServer::~URServer() TCPSocket::close(); } -void URServer::setOptions(int socket_fd) -{ - TCPSocket::setOptions(socket_fd); - - int flag = 1; - setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)); -} - std::string URServer::getIP() { sockaddr_in name; @@ -39,6 +31,14 @@ std::string URServer::getIP() return std::string(buf); } + +bool URServer::open(int socket_fd, struct sockaddr *address, size_t address_len) +{ + int flag = 1; + setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)); + return ::bind(socket_fd, address, address_len) == 0; +} + bool URServer::bind() { std::string empty; @@ -65,7 +65,7 @@ bool URServer::accept() if (client_fd <= 0) return false; - setOptions(client_fd); + TCPSocket::setOptions(client_fd); return client_.setSocketFD(client_fd); }