FS-6969 #resolve #comment This patch should accomplish the same and handle other platforms, please test

This commit is contained in:
Anthony Minessale 2014-11-07 08:37:53 -06:00
parent b7741916eb
commit 5ce5199be9
2 changed files with 46 additions and 0 deletions

View File

@ -541,6 +541,28 @@ SWITCH_DECLARE(int) switch_build_uri(char *uri, switch_size_t size, const char *
#define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35 || x == SWITCH_STATUS_INTR)
#ifdef _MSC_VER
#define switch_errno() WSAGetLastError()
static inline int switch_errno_is_break(int errcode)
{
return errcode == WSAEWOULDBLOCK || errcode == WSAEINPROGRESS || errcode == WSAEINTR;
}
#else
#define switch_errno() errno
static inline int switch_errno_is_break(int errcode)
{
return errcode == EAGAIN || errcode == EWOULDBLOCK || errcode == EINPROGRESS || errcode == EINTR || errcode == ETIMEDOUT;
}
#endif
/*!
\brief Return a printable name of a switch_priority_t
\param priority the priority to get the name of

View File

@ -2567,6 +2567,12 @@ SWITCH_DECLARE(int) switch_wait_sock(switch_os_socket_t sock, uint32_t ms, switc
s = poll(pfds, 1, ms);
if (s < 0) {
if (switch_errno_is_break(switch_errno())) {
s = 0;
}
}
if (s < 0) {
r = s;
} else if (s > 0) {
@ -2645,6 +2651,12 @@ SWITCH_DECLARE(int) switch_wait_socklist(switch_waitlist_t *waitlist, uint32_t l
s = poll(pfds, len, ms);
if (s < 0) {
if (switch_errno_is_break(switch_errno())) {
s = 0;
}
}
if (s < 0) {
r = s;
} else if (s > 0) {
@ -2758,6 +2770,12 @@ SWITCH_DECLARE(int) switch_wait_sock(switch_os_socket_t sock, uint32_t ms, switc
s = select(sock + 1, (flags & SWITCH_POLL_READ) ? rfds : NULL, (flags & SWITCH_POLL_WRITE) ? wfds : NULL, (flags & SWITCH_POLL_ERROR) ? efds : NULL, &tv);
if (s < 0) {
if (switch_errno_is_break(switch_errno())) {
s = 0;
}
}
if (s < 0) {
r = s;
} else if (s > 0) {
@ -2858,6 +2876,12 @@ SWITCH_DECLARE(int) switch_wait_socklist(switch_waitlist_t *waitlist, uint32_t l
s = select(max_fd + 1, (flags & SWITCH_POLL_READ) ? rfds : NULL, (flags & SWITCH_POLL_WRITE) ? wfds : NULL, (flags & SWITCH_POLL_ERROR) ? efds : NULL, &tv);
if (s < 0) {
if (switch_errno_is_break(switch_errno())) {
s = 0;
}
}
if (s < 0) {
r = s;
} else if (s > 0) {