From 1cdc68cf1d1584314b26b7d73a5f6b1dbb0c5111 Mon Sep 17 00:00:00 2001 From: Karl Heyes Date: Tue, 5 Feb 2008 04:21:12 +0000 Subject: [PATCH] Use poll if available, select can cause stack corruption if descriptor value is over 1024 svn path=/icecast/trunk/net/; revision=14457 --- src/net/sock.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/net/sock.c b/src/net/sock.c index 59347392..86bdd0b5 100644 --- a/src/net/sock.c +++ b/src/net/sock.c @@ -30,6 +30,9 @@ #include #include #include +#ifdef HAVE_POLL +#include +#endif #ifdef HAVE_SYS_SELECT_H #include #endif @@ -508,6 +511,26 @@ int sock_read_line(sock_t sock, char *buff, const int len) * return 0 for try again, interrupted * return 1 for ok */ +#ifdef HAVE_POLL +int sock_connected (sock_t sock, int timeout) +{ + struct pollfd check; + + check.fd = sock; + check.events = POLLOUT; + switch (poll (&check, 1, timeout*1000)) + { + case 0: return SOCK_TIMEOUT; + case -1: + if (sock_recoverable (sock_error())) + return 0; + return SOCK_ERROR; + default: return 1; + } +} + +#else + int sock_connected (sock_t sock, int timeout) { fd_set wfds; @@ -545,6 +568,7 @@ int sock_connected (sock_t sock, int timeout) return SOCK_ERROR; } } +#endif #ifdef HAVE_GETADDRINFO