From 5fe6ddfda3ab207c579c7dc6a9b2be48bf3cdb92 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 7 May 2012 15:46:55 +0200 Subject: [PATCH] On Windows, preventing sockets to be inherited by child processes. --- src/ip.cpp | 6 ++++++ src/signaler.cpp | 10 +++++++++- src/tcp_listener.cpp | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ip.cpp b/src/ip.cpp index 283eb6d8..7e9ed58d 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -57,6 +57,12 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_) errno_assert (rc != -1); #endif + // On Windows, preventing sockets to be inherited by child processes. +#if defined ZMQ_HAVE_WINDOWS && defined HANDLE_FLAG_INHERIT + BOOL brc = SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0); + win_assert (brc); +#endif + return s; } diff --git a/src/signaler.cpp b/src/signaler.cpp index 66bc753e..640208cf 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -288,6 +288,10 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) *w_ = WSASocket (AF_INET, SOCK_STREAM, 0, NULL, 0, 0); wsa_assert (*w_ != INVALID_SOCKET); + // On Windows, preventing sockets to be inherited by child processes. + BOOL brc = SetHandleInformation ((HANDLE) *w_, HANDLE_FLAG_INHERIT, 0); + win_assert (brc); + // Set TCP_NODELAY on writer socket. rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, (char *)&tcp_nodelay, sizeof (tcp_nodelay)); @@ -301,12 +305,16 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) *r_ = accept (listener, NULL, NULL); wsa_assert (*r_ != INVALID_SOCKET); + // On Windows, preventing sockets to be inherited by child processes. + brc = SetHandleInformation ((HANDLE) *r_, HANDLE_FLAG_INHERIT, 0); + win_assert (brc); + // We don't need the listening socket anymore. Close it. rc = closesocket (listener); wsa_assert (rc != SOCKET_ERROR); // Exit the critical section. - BOOL brc = SetEvent (sync); + brc = SetEvent (sync); win_assert (brc != 0); return 0; diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 67df66d7..156c35fe 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -164,6 +164,9 @@ int zmq::tcp_listener_t::set_address (const char *addr_) wsa_error_to_errno (); return -1; } + // On Windows, preventing sockets to be inherited by child processes. + BOOL brc = SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0); + win_assert (brc); #else if (s == -1) return -1; @@ -227,6 +230,9 @@ zmq::fd_t zmq::tcp_listener_t::accept () WSAGetLastError () == WSAECONNRESET); return retired_fd; } + // On Windows, preventing sockets to be inherited by child processes. + BOOL brc = SetHandleInformation ((HANDLE) sock, HANDLE_FLAG_INHERIT, 0); + win_assert (brc); #else if (sock == -1) { errno_assert (errno == EAGAIN || errno == EWOULDBLOCK ||