summaryrefslogtreecommitdiff
path: root/louloulibs/network
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2015-11-07 23:41:06 +0100
committerFlorent Le Coz <louiz@louiz.org>2015-11-07 23:41:06 +0100
commit0620c8e589c713fa0f0d0f66a4c4d203e8f3f87f (patch)
tree30c4aaf1b49036102ebd6e3805af0bac5695c213 /louloulibs/network
parent5027b21fd1fe0dec6a82a2b0f428f30f5cc98a42 (diff)
downloadbiboumi-0620c8e589c713fa0f0d0f66a4c4d203e8f3f87f.tar.gz
biboumi-0620c8e589c713fa0f0d0f66a4c4d203e8f3f87f.tar.bz2
biboumi-0620c8e589c713fa0f0d0f66a4c4d203e8f3f87f.tar.xz
biboumi-0620c8e589c713fa0f0d0f66a4c4d203e8f3f87f.zip
Avoid leaking socket filedescriptors
When trying the various results of getaddrinfo, we forgot to close the socket when one fails, before trying the next one. Also use the destructor to make sure we do not have some other unrelated leak.
Diffstat (limited to 'louloulibs/network')
-rw-r--r--louloulibs/network/tcp_socket_handler.cpp8
-rw-r--r--louloulibs/network/tcp_socket_handler.hpp2
2 files changed, 9 insertions, 1 deletions
diff --git a/louloulibs/network/tcp_socket_handler.cpp b/louloulibs/network/tcp_socket_handler.cpp
index 0ed74a2..d5c0dfa 100644
--- a/louloulibs/network/tcp_socket_handler.cpp
+++ b/louloulibs/network/tcp_socket_handler.cpp
@@ -44,8 +44,16 @@ TCPSocketHandler::TCPSocketHandler(std::shared_ptr<Poller> poller):
#endif
{}
+TCPSocketHandler::~TCPSocketHandler()
+{
+ this->close();
+}
+
+
void TCPSocketHandler::init_socket(const struct addrinfo* rp)
{
+ if (this->socket != -1)
+ ::close(this->socket);
if ((this->socket = ::socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) == -1)
throw std::runtime_error("Could not create socket: "s + strerror(errno));
int optval = 1;
diff --git a/louloulibs/network/tcp_socket_handler.hpp b/louloulibs/network/tcp_socket_handler.hpp
index 213e286..d33b919 100644
--- a/louloulibs/network/tcp_socket_handler.hpp
+++ b/louloulibs/network/tcp_socket_handler.hpp
@@ -27,7 +27,7 @@
class TCPSocketHandler: public SocketHandler
{
protected:
- ~TCPSocketHandler() = default;
+ ~TCPSocketHandler();
public:
explicit TCPSocketHandler(std::shared_ptr<Poller> poller);