summaryrefslogtreecommitdiff
path: root/srclib/apr/poll/unix/select.c
diff options
context:
space:
mode:
authorStefan Fritsch <sf@sfritsch.de>2011-12-27 19:43:09 +0100
committerStefan Fritsch <sf@sfritsch.de>2011-12-27 19:43:09 +0100
commit5b56d06a01a150fc9685e6f913774be3f9deb49f (patch)
tree9fbfbe0313b782941f1c2c4d3cb5203817144108 /srclib/apr/poll/unix/select.c
parent498ea95018b369e62646a98c7d7d5413b56e170c (diff)
downloadapache2-5b56d06a01a150fc9685e6f913774be3f9deb49f.tar.gz
Upstream tarball 2.2.19upstream/2.2.19
Diffstat (limited to 'srclib/apr/poll/unix/select.c')
-rw-r--r--srclib/apr/poll/unix/select.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/srclib/apr/poll/unix/select.c b/srclib/apr/poll/unix/select.c
index 9288de00..61a064f4 100644
--- a/srclib/apr/poll/unix/select.c
+++ b/srclib/apr/poll/unix/select.c
@@ -41,6 +41,21 @@ APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, int num,
apr_datatype_e set_type = APR_NO_DESC;
#endif
+#ifdef WIN32
+ /* On Win32, select() must be presented with at least one socket to
+ * poll on, or select() will return WSAEINVAL. So, we'll just
+ * short-circuit and bail now.
+ */
+ if (num == 0) {
+ (*nsds) = 0;
+ if (timeout > 0) {
+ apr_sleep(timeout);
+ return APR_TIMEUP;
+ }
+ return APR_SUCCESS;
+ }
+#endif
+
if (timeout < 0) {
tvptr = NULL;
}
@@ -339,6 +354,10 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
*/
if (pollset->nelts == 0) {
(*num) = 0;
+ if (timeout > 0) {
+ apr_sleep(timeout);
+ return APR_TIMEUP;
+ }
return APR_SUCCESS;
}
#endif