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 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/TcpSocket.cpp') 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; } } -- cgit v1.2.3 From 80f804505dc970613fd9d90b7d3ce52f9fd40c7a Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Mon, 7 Nov 2016 21:25:36 +0100 Subject: Only initialise the socket in TcpSocket when necessary --- src/TcpSocket.cpp | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'src/TcpSocket.cpp') diff --git a/src/TcpSocket.cpp b/src/TcpSocket.cpp index 6791286..b9824fa 100644 --- a/src/TcpSocket.cpp +++ b/src/TcpSocket.cpp @@ -39,31 +39,30 @@ using namespace std; TcpSocket::TcpSocket() : m_sock(INVALID_SOCKET) { - if ((m_sock = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { - throw std::runtime_error("Can't create socket"); - } } TcpSocket::TcpSocket(int port, const string& name) : m_sock(INVALID_SOCKET) { - if ((m_sock = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { - throw std::runtime_error("Can't create socket"); - } + if (port) { + if ((m_sock = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { + throw std::runtime_error("Can't create socket"); + } - reuseopt_t reuse = 1; - if (setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) - == SOCKET_ERROR) { - throw std::runtime_error("Can't reuse address"); - } + reuseopt_t reuse = 1; + if (setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) + == SOCKET_ERROR) { + throw std::runtime_error("Can't reuse address"); + } - m_own_address.setAddress(name); - m_own_address.setPort(port); + m_own_address.setAddress(name); + m_own_address.setPort(port); - if (bind(m_sock, m_own_address.getAddress(), sizeof(sockaddr_in)) == SOCKET_ERROR) { - ::close(m_sock); - m_sock = INVALID_SOCKET; - throw std::runtime_error("Can't bind socket"); + if (bind(m_sock, m_own_address.getAddress(), sizeof(sockaddr_in)) == SOCKET_ERROR) { + ::close(m_sock); + m_sock = INVALID_SOCKET; + throw std::runtime_error("Can't bind socket"); + } } } -- cgit v1.2.3