From 5c12d5b387e07203be79df7e4d526d124a53ad8a Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 5 Nov 2016 15:00:09 +0100 Subject: Do not use boost::optional for TcpSocket Older boost versions require T to be copy-constructable in optional. This is not the case for TcpSocket, which is only move-constructable. Fixes compilation on debian jessie --- src/TcpSocket.cpp | 10 ++++++++-- src/TcpSocket.h | 13 ++++++++++--- src/dabOutput/dabOutputTcp.cpp | 6 +++--- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/TcpSocket.cpp b/src/TcpSocket.cpp index 433e5c1..6791286 100644 --- a/src/TcpSocket.cpp +++ b/src/TcpSocket.cpp @@ -116,6 +116,11 @@ TcpSocket::~TcpSocket() close(); } +bool TcpSocket::isValid() +{ + return m_sock != INVALID_SOCKET; +} + ssize_t TcpSocket::recv(void* data, size_t size) { ssize_t ret = ::recv(m_sock, (char*)data, size, 0); @@ -167,7 +172,7 @@ TcpSocket TcpSocket::accept() } } -boost::optional TcpSocket::accept(int timeout_ms) +TcpSocket TcpSocket::accept(int timeout_ms) { struct pollfd fds[1]; fds[0].fd = m_sock; @@ -184,7 +189,8 @@ boost::optional TcpSocket::accept(int timeout_ms) return accept(); } else { - return boost::none; + TcpSocket invalidsock(0, ""); + return invalidsock; } } diff --git a/src/TcpSocket.h b/src/TcpSocket.h index 8df913f..660515d 100644 --- a/src/TcpSocket.h +++ b/src/TcpSocket.h @@ -46,7 +46,7 @@ #include #include -#include +#include /** * This class represents a TCP socket. @@ -70,7 +70,9 @@ class TcpSocket TcpSocket(const TcpSocket& other) = delete; TcpSocket& operator=(const TcpSocket& other) = delete; - int close(); + bool isValid(void); + + int close(void); /** Send data over the TCP connection. * @param data The buffer that will be sent. @@ -88,7 +90,12 @@ class TcpSocket void listen(void); TcpSocket accept(void); - boost::optional accept(int timeout_ms); + + /* Returns either valid socket if a connection was + * accepted before the timeout expired, or an invalid + * socket otherwise. + */ + TcpSocket accept(int timeout_ms); /** Retrieve address this socket is bound to */ InetAddress getOwnAddress() const; diff --git a/src/dabOutput/dabOutputTcp.cpp b/src/dabOutput/dabOutputTcp.cpp index 94d379e..975fdff 100644 --- a/src/dabOutput/dabOutputTcp.cpp +++ b/src/dabOutput/dabOutputTcp.cpp @@ -133,9 +133,9 @@ class TCPDataDispatcher while (m_running) { // Add a new TCPConnection to the list, constructing it from the client socket - auto optional_sock = m_listener_socket.accept(timeout_ms); - if (optional_sock) { - m_connections.emplace(m_connections.begin(), std::move(*optional_sock)); + auto sock = m_listener_socket.accept(timeout_ms); + if (sock.isValid()) { + m_connections.emplace(m_connections.begin(), move(sock)); } } } -- cgit v1.2.3