diff options
| -rw-r--r-- | acinclude.m4 | 22 | ||||
| -rw-r--r-- | configure.in | 5 | ||||
| -rw-r--r-- | src/ip.cpp | 4 | 
3 files changed, 29 insertions, 2 deletions
| diff --git a/acinclude.m4 b/acinclude.m4 index 7e96921..537be18 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -582,6 +582,28 @@ AC_DEFUN([LIBZMQ_CHECK_LANG_VISIBILITY], [{  }])  dnl ################################################################################ +dnl # LIBZMQ_CHECK_SOCK_CLOEXEC([action-if-found], [action-if-not-found])          # +dnl # Check if SOCK_CLOEXEC is supported                                           # +dnl ################################################################################ +AC_DEFUN([LIBZMQ_CHECK_SOCK_CLOEXEC], [{ +    AC_MSG_CHECKING(whether SOCK_CLOEXEC is supported) +    AC_TRY_RUN([/* SOCK_CLOEXEC test */ +#include <sys/types.h> +#include <sys/socket.h> + +int main (int argc, char *argv []) +{ +    int s = socket (PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); +    return (s == -1); +} +    ], +    [AC_MSG_RESULT(yes) ; libzmq_cv_sock_cloexec="yes" ; $1], +    [AC_MSG_RESULT(no)  ; libzmq_cv_sock_cloexec="no"  ; $2], +    [AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_sock_cloexec="no"] +    ) +}]) + +dnl ################################################################################  dnl # LIBZMQ_CHECK_POLLER_KQUEUE([action-if-found], [action-if-not-found])         #  dnl # Checks kqueue polling system                                                 #  dnl ################################################################################ diff --git a/configure.in b/configure.in index ed8fa14..b0ee7a1 100644 --- a/configure.in +++ b/configure.in @@ -383,6 +383,11 @@ AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")  AC_TYPE_SIGNAL  AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs)  AC_CHECK_HEADERS([alloca.h]) +LIBZMQ_CHECK_SOCK_CLOEXEC([AC_DEFINE( +                              [ZMQ_HAVE_SOCK_CLOEXEC], +                              [1], +                              [Whether SOCK_CLOEXEC is defined and functioning.]) +                          ])  # Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS  AC_SUBST(LIBZMQ_EXTRA_CFLAGS) @@ -40,7 +40,7 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_)  {      //  Setting this option result in sane behaviour when exec() functions      //  are used. Old sockets are closed and don't block TCP ports etc. -#if defined SOCK_CLOEXEC +#if defined ZMQ_HAVE_SOCK_CLOEXEC      type_ |= SOCK_CLOEXEC;  #endif @@ -51,7 +51,7 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_)      //  If there's no SOCK_CLOEXEC, let's try the second best option. Note that      //  race condition can cause socket not to be closed (if fork happens      //  between socket creation and this point). -#if !defined SOCK_CLOEXEC && defined FD_CLOEXEC +#if !defined ZMQ_HAVE_SOCK_CLOEXEC && defined FD_CLOEXEC      int rc = fcntl (s, F_SETFD, FD_CLOEXEC);      errno_assert (rc != -1);  #endif | 
