From fa027970bb3aad2d3634efab791ad15f0fed9ae2 Mon Sep 17 00:00:00 2001 From: Antony Searle Date: Tue, 17 Apr 2018 12:33:18 +1000 Subject: [PATCH] Allow EBADF on iOS #3046 --- src/ip.cpp | 8 ++++++++ src/tcp.cpp | 15 +++++++++++++++ src/tcp_connecter.cpp | 9 +++++++++ src/udp_engine.cpp | 9 +++++++++ 4 files changed, 41 insertions(+) diff --git a/src/ip.cpp b/src/ip.cpp index abc49858..acb4ee95 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -66,6 +66,10 @@ #include #endif +#ifdef __APPLE__ +#include +#endif + zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_) { int rc; @@ -167,7 +171,11 @@ int zmq::get_peer_ip_address (fd_t sockfd_, std::string &ip_addr_) } #else if (rc == -1) { +#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE errno_assert (errno != EBADF && errno != EFAULT && errno != ENOTSOCK); +#else + errno_assert (errno != EFAULT && errno != ENOTSOCK); +#endif return 0; } #endif diff --git a/src/tcp.cpp b/src/tcp.cpp index fd9b6ad0..87596fb7 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -48,6 +48,10 @@ #include #endif +#ifdef __APPLE__ +#include +#endif + int zmq::tune_tcp_socket (fd_t s_) { // Disable Nagle's algorithm. We are doing data batching on 0MQ level, @@ -238,10 +242,17 @@ int zmq::tcp_write (fd_t s_, const void *data_, size_t size_) // Signalise peer failure. if (nbytes == -1) { +#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE errno_assert (errno != EACCES && errno != EBADF && errno != EDESTADDRREQ && errno != EFAULT && errno != EISCONN && errno != EMSGSIZE && errno != ENOMEM && errno != ENOTSOCK && errno != EOPNOTSUPP); +#else + errno_assert (errno != EACCES && errno != EDESTADDRREQ + && errno != EFAULT && errno != EISCONN + && errno != EMSGSIZE && errno != ENOMEM + && errno != ENOTSOCK && errno != EOPNOTSUPP); +#endif return -1; } @@ -282,8 +293,12 @@ int zmq::tcp_read (fd_t s_, void *data_, size_t size_) // be able to read a single byte from the socket. Also, SIGSTOP issued // by a debugging tool can result in EINTR error. if (rc == -1) { +#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE errno_assert (errno != EBADF && errno != EFAULT && errno != ENOMEM && errno != ENOTSOCK); +#else + errno_assert (errno != EFAULT && errno != ENOMEM && errno != ENOTSOCK); +#endif if (errno == EWOULDBLOCK || errno == EINTR) errno = EAGAIN; } diff --git a/src/tcp_connecter.cpp b/src/tcp_connecter.cpp index 0a2068e9..2748a594 100644 --- a/src/tcp_connecter.cpp +++ b/src/tcp_connecter.cpp @@ -60,6 +60,10 @@ #endif #endif +#ifdef __APPLE__ +#include +#endif + zmq::tcp_connecter_t::tcp_connecter_t (class io_thread_t *io_thread_, class session_base_t *session_, const options_t &options_, @@ -403,8 +407,13 @@ zmq::fd_t zmq::tcp_connecter_t::connect () err = errno; if (err != 0) { errno = err; +#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE errno_assert (errno != EBADF && errno != ENOPROTOOPT && errno != ENOTSOCK && errno != ENOBUFS); +#else + errno_assert (errno != ENOPROTOOPT && errno != ENOTSOCK + && errno != ENOBUFS); +#endif return retired_fd; } #endif diff --git a/src/udp_engine.cpp b/src/udp_engine.cpp index f40a0c56..54812199 100644 --- a/src/udp_engine.cpp +++ b/src/udp_engine.cpp @@ -51,6 +51,10 @@ along with this program. If not, see . #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP #endif +#ifdef __APPLE__ +#include +#endif + zmq::udp_engine_t::udp_engine_t (const options_t &options_) : plugged (false), fd (-1), @@ -448,8 +452,13 @@ void zmq::udp_engine_t::in_event () int nbytes = recvfrom (fd, in_buffer, MAX_UDP_MSG, 0, (sockaddr *) &in_address, &in_addrlen); if (nbytes == -1) { +#if !defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE errno_assert (errno != EBADF && errno != EFAULT && errno != ENOMEM && errno != ENOTSOCK); +#else + errno_assert (errno != EBADF && errno != EFAULT && errno != ENOMEM + && errno != ENOTSOCK); +#endif return; } #endif