diff --git a/src/signaler.cpp b/src/signaler.cpp index 8a5d38e0..13acb5d2 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -238,6 +238,8 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) return 0; #elif defined ZMQ_HAVE_WINDOWS +#if !defined _WIN32_WCE + // Windows CE does not manage security attributes SECURITY_DESCRIPTOR sd; SECURITY_ATTRIBUTES sa; memset (&sd, 0, sizeof (sd)); @@ -248,6 +250,7 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = &sd; +#endif // This function has to be in a system-wide critical section so that // two instances of the library don't accidentally create signaler @@ -256,7 +259,11 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) // Note that if the event object already exists, the CreateEvent requests // EVENT_ALL_ACCESS access right. If this fails, we try to open // the event object asking for SYNCHRONIZE access only. +#if !defined _WIN32_WCE HANDLE sync = CreateEvent (&sa, FALSE, TRUE, TEXT ("Global\\zmq-signaler-port-sync")); +#else + HANDLE sync = CreateEvent (NULL, FALSE, TRUE, TEXT ("Global\\zmq-signaler-port-sync")); +#endif if (sync == NULL && GetLastError () == ERROR_ACCESS_DENIED) sync = OpenEvent (SYNCHRONIZE | EVENT_MODIFY_STATE, FALSE, TEXT ("Global\\zmq-signaler-port-sync")); @@ -303,9 +310,13 @@ 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); +#if !defined _WIN32_WCE // On Windows, preventing sockets to be inherited by child processes. BOOL brc = SetHandleInformation ((HANDLE) *w_, HANDLE_FLAG_INHERIT, 0); win_assert (brc); +#else + BOOL brc; +#endif // Set TCP_NODELAY on writer socket. rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, @@ -341,10 +352,11 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) win_assert (brc != 0); if (*r_ != INVALID_SOCKET) { +#if !defined _WIN32_WCE // On Windows, preventing sockets to be inherited by child processes. brc = SetHandleInformation ((HANDLE) *r_, HANDLE_FLAG_INHERIT, 0); win_assert (brc); - +#endif return 0; } else { // Cleanup writer if connection failed diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 73fad94b..cf40b85d 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -174,9 +174,11 @@ int zmq::tcp_listener_t::set_address (const char *addr_) errno = wsa_error_to_errno (WSAGetLastError ()); return -1; } +#if !defined _WIN32_WCE // On Windows, preventing sockets to be inherited by child processes. BOOL brc = SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0); win_assert (brc); +#endif #else if (s == -1) return -1; @@ -258,9 +260,11 @@ zmq::fd_t zmq::tcp_listener_t::accept () WSAGetLastError () == WSAENOBUFS); return retired_fd; } +#if !defined _WIN32_WCE // On Windows, preventing sockets to be inherited by child processes. BOOL brc = SetHandleInformation ((HANDLE) sock, HANDLE_FLAG_INHERIT, 0); win_assert (brc); +#endif #else if (sock == -1) { errno_assert (errno == EAGAIN || errno == EWOULDBLOCK ||