From bda30421d7101b3a6fcde90fabb61d1482fa7ead Mon Sep 17 00:00:00 2001 From: Gabriel Arjones Date: Thu, 8 Sep 2016 15:25:57 -0300 Subject: [PATCH] Resolve remote peer prior to opening server socket This is important to prevent leaking server socket descriptor in case createIPClientSocket throws --- src/Driver.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Driver.cpp b/src/Driver.cpp index bd0cd86..a15e59b 100644 --- a/src/Driver.cpp +++ b/src/Driver.cpp @@ -353,13 +353,12 @@ void Driver::openUDPBidirectional(std::string const& hostname, int out_port, int out_hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ out_hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - int sfd = createIPServerSocket(in_port, in_hints); - struct sockaddr peer; size_t peer_len; int peerfd = createIPClientSocket(hostname.c_str(), boost::lexical_cast(out_port).c_str(), out_hints, &peer, &peer_len); - ::close(peerfd); + + int sfd = createIPServerSocket(in_port, in_hints); setMainStream(new UDPServerStream(sfd, true, &peer, &peer_len)); }