Commit 7140bf04 authored by Pieter Hintjens's avatar Pieter Hintjens

Merge pull request #957 from jkryl/master

sockets created by accept are leaked to child processes (ticket #956)
parents 55bde2a7 48b37f21
...@@ -280,6 +280,13 @@ zmq::fd_t zmq::ipc_listener_t::accept () ...@@ -280,6 +280,13 @@ zmq::fd_t zmq::ipc_listener_t::accept ()
return retired_fd; return retired_fd;
} }
// Race condition can cause socket not to be closed (if fork happens
// between accept and this point).
#ifdef FD_CLOEXEC
int rc = fcntl (sock, F_SETFD, FD_CLOEXEC);
errno_assert (rc != -1);
#endif
// IPC accept() filters // IPC accept() filters
#if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED #if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED
if (!filter (sock)) { if (!filter (sock)) {
......
...@@ -288,6 +288,13 @@ zmq::fd_t zmq::tcp_listener_t::accept () ...@@ -288,6 +288,13 @@ zmq::fd_t zmq::tcp_listener_t::accept ()
} }
#endif #endif
// Race condition can cause socket not to be closed (if fork happens
// between accept and this point).
#ifdef FD_CLOEXEC
int rc = fcntl (sock, F_SETFD, FD_CLOEXEC);
errno_assert (rc != -1);
#endif
if (!options.tcp_accept_filters.empty ()) { if (!options.tcp_accept_filters.empty ()) {
bool matched = false; bool matched = false;
for (options_t::tcp_accept_filters_t::size_type i = 0; i != options.tcp_accept_filters.size (); ++i) { for (options_t::tcp_accept_filters_t::size_type i = 0; i != options.tcp_accept_filters.size (); ++i) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment