From 22b2b9a2b6e1dd18d58ef51f453d2b4777e71be4 Mon Sep 17 00:00:00 2001 From: Dhammika Pathirana Date: Mon, 13 Dec 2010 14:18:47 +0100 Subject: fix overwriting errno on bind failure Signed-off-by: Dhammika Pathirana --- src/tcp_listener.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/tcp_listener.cpp') diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 6d41069..22e9d4d 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -30,6 +30,7 @@ #ifdef ZMQ_HAVE_WINDOWS zmq::tcp_listener_t::tcp_listener_t () : + has_file (false), s (retired_fd) { memset (&addr, 0, sizeof (addr)); @@ -151,6 +152,7 @@ zmq::fd_t zmq::tcp_listener_t::accept () #endif zmq::tcp_listener_t::tcp_listener_t () : + has_file (false), s (retired_fd) { memset (&addr, 0, sizeof (addr)); @@ -236,11 +238,12 @@ int zmq::tcp_listener_t::set_address (const char *protocol_, const char *addr_, errno_assert (rc != -1); // Bind the socket to the file path. - rc = bind (s, (struct sockaddr*) &addr, sizeof (sockaddr_un)); + rc = bind (s, (struct sockaddr*) &addr, addr_len); if (rc != 0) { close (); return -1; } + has_file = true; // Listen for incomming connections. rc = listen (s, backlog_); @@ -270,7 +273,7 @@ int zmq::tcp_listener_t::close () // If there's an underlying UNIX domain socket, get rid of the file it // is associated with. struct sockaddr_un *su = (struct sockaddr_un*) &addr; - if (AF_UNIX == su->sun_family) { + if (AF_UNIX == su->sun_family && has_file) { rc = ::unlink(su->sun_path); if (rc != 0) return -1; -- cgit v1.2.3