diff --git a/src/libthecore/socket.cpp b/src/libthecore/socket.cpp index b99786e..bf430d1 100644 --- a/src/libthecore/socket.cpp +++ b/src/libthecore/socket.cpp @@ -206,6 +206,28 @@ socket_t socket_accept(socket_t s, struct sockaddr_in *peer) if ((desc = accept(s, (struct sockaddr *) peer, &i)) == -1) { +#ifdef EINTR + if (errno == EINTR) + return INVALID_SOCKET; +#endif + +#ifdef EAGAIN + if (errno == EAGAIN) + return INVALID_SOCKET; +#endif + +#ifdef EWOULDBLOCK + if (errno == EWOULDBLOCK) + return INVALID_SOCKET; +#endif + +#ifdef OS_WINDOWS + int wsa_error = WSAGetLastError(); + if (wsa_error == WSAEWOULDBLOCK || wsa_error == WSAEINTR) { + return INVALID_SOCKET; + } +#endif + sys_err("accept: %s (fd %d)", strerror(errno), s); return -1; }