diff options
Diffstat (limited to 'src/components/transport_manager/src/tcp/tcp_client_listener.cc')
-rw-r--r-- | src/components/transport_manager/src/tcp/tcp_client_listener.cc | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/src/components/transport_manager/src/tcp/tcp_client_listener.cc b/src/components/transport_manager/src/tcp/tcp_client_listener.cc index 28a3c389da..a075b1afb7 100644 --- a/src/components/transport_manager/src/tcp/tcp_client_listener.cc +++ b/src/components/transport_manager/src/tcp/tcp_client_listener.cc @@ -42,12 +42,12 @@ #include <sys/sysctl.h> #include <sys/socket.h> #ifdef __linux__ -# include <linux/tcp.h> +#include <linux/tcp.h> #else // __linux__ -# include <sys/time.h> -# include <netinet/in.h> -# include <netinet/tcp.h> -# include <netinet/tcp_var.h> +#include <sys/time.h> +#include <netinet/in.h> +#include <netinet/tcp.h> +#include <netinet/tcp_var.h> #endif // __linux__ #include <sstream> @@ -66,12 +66,12 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager") TcpClientListener::TcpClientListener(TransportAdapterController* controller, const uint16_t port, const bool enable_keepalive) - : port_(port), - enable_keepalive_(enable_keepalive), - controller_(controller), - thread_(0), - socket_(-1), - thread_stop_requested_(false) { + : port_(port) + , enable_keepalive_(enable_keepalive) + , controller_(controller) + , thread_(0) + , socket_(-1) + , thread_stop_requested_(false) { thread_ = threads::CreateThread("TcpClientListener", new ListeningThreadDelegate(this)); } @@ -86,7 +86,7 @@ TransportAdapter::Error TcpClientListener::Init() { return TransportAdapter::FAIL; } - sockaddr_in server_address = { 0 }; + sockaddr_in server_address = {0}; server_address.sin_family = AF_INET; server_address.sin_port = htons(port_); server_address.sin_addr.s_addr = INADDR_ANY; @@ -94,7 +94,8 @@ TransportAdapter::Error TcpClientListener::Init() { int optval = 1; setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - if (bind(socket_, reinterpret_cast<sockaddr*>(&server_address), + if (bind(socket_, + reinterpret_cast<sockaddr*>(&server_address), sizeof(server_address)) != 0) { LOG4CXX_ERROR_WITH_ERRNO(logger_, "bind() failed"); return TransportAdapter::FAIL; @@ -148,8 +149,8 @@ void SetKeepaliveOptions(const int fd) { setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle)); setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt)); setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl)); - setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &user_timeout, - sizeof(user_timeout)); + setsockopt( + fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &user_timeout, sizeof(user_timeout)); #elif defined(__QNX__) // __linux__ // TODO(KKolodiy): Out of order! const int kMidLength = 4; @@ -177,7 +178,7 @@ void SetKeepaliveOptions(const int fd) { tval.tv_sec = keepidle; setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &yes, sizeof(yes)); setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &tval, sizeof(tval)); -#endif // __QNX__ +#endif // __QNX__ } void TcpClientListener::Loop() { @@ -185,9 +186,8 @@ void TcpClientListener::Loop() { while (!thread_stop_requested_) { sockaddr_in client_address; socklen_t client_address_size = sizeof(client_address); - const int connection_fd = accept(socket_, - (struct sockaddr*) &client_address, - &client_address_size); + const int connection_fd = accept( + socket_, (struct sockaddr*)&client_address, &client_address_size); if (thread_stop_requested_) { LOG4CXX_DEBUG(logger_, "thread_stop_requested_"); close(connection_fd); @@ -206,7 +206,8 @@ void TcpClientListener::Loop() { } char device_name[32]; - strncpy(device_name, inet_ntoa(client_address.sin_addr), + strncpy(device_name, + inet_ntoa(client_address.sin_addr), sizeof(device_name) / sizeof(device_name[0])); LOG4CXX_INFO(logger_, "Connected client " << device_name); @@ -214,16 +215,15 @@ void TcpClientListener::Loop() { SetKeepaliveOptions(connection_fd); } - TcpDevice* tcp_device = new TcpDevice(client_address.sin_addr.s_addr, - device_name); + TcpDevice* tcp_device = + new TcpDevice(client_address.sin_addr.s_addr, device_name); DeviceSptr device = controller_->AddDevice(tcp_device); tcp_device = static_cast<TcpDevice*>(device.get()); - const ApplicationHandle app_handle = tcp_device->AddIncomingApplication( - connection_fd); + const ApplicationHandle app_handle = + tcp_device->AddIncomingApplication(connection_fd); - TcpSocketConnection* connection( - new TcpSocketConnection(device->unique_device_id(), app_handle, - controller_)); + TcpSocketConnection* connection(new TcpSocketConnection( + device->unique_device_id(), app_handle, controller_)); connection->set_socket(connection_fd); const TransportAdapter::Error error = connection->Start(); if (error != TransportAdapter::OK) { @@ -237,11 +237,12 @@ void TcpClientListener::StopLoop() { thread_stop_requested_ = true; // We need to connect to the listening socket to unblock accept() call int byesocket = socket(AF_INET, SOCK_STREAM, 0); - sockaddr_in server_address = { 0 }; + sockaddr_in server_address = {0}; server_address.sin_family = AF_INET; server_address.sin_port = htons(port_); server_address.sin_addr.s_addr = INADDR_ANY; - connect(byesocket, reinterpret_cast<sockaddr*>(&server_address), + connect(byesocket, + reinterpret_cast<sockaddr*>(&server_address), sizeof(server_address)); shutdown(byesocket, SHUT_RDWR); close(byesocket); @@ -250,8 +251,9 @@ void TcpClientListener::StopLoop() { TransportAdapter::Error TcpClientListener::StartListening() { LOG4CXX_AUTO_TRACE(logger_); if (thread_->is_running()) { - LOG4CXX_WARN(logger_, - "TransportAdapter::BAD_STATE. Listener has already been started"); + LOG4CXX_WARN( + logger_, + "TransportAdapter::BAD_STATE. Listener has already been started"); return TransportAdapter::BAD_STATE; } @@ -273,8 +275,7 @@ void TcpClientListener::ListeningThreadDelegate::threadMain() { TcpClientListener::ListeningThreadDelegate::ListeningThreadDelegate( TcpClientListener* parent) - : parent_(parent) { -} + : parent_(parent) {} TransportAdapter::Error TcpClientListener::StopListening() { LOG4CXX_AUTO_TRACE(logger_); |