summaryrefslogtreecommitdiff
path: root/srclib/apr/poll/unix/poll.c
diff options
context:
space:
mode:
Diffstat (limited to 'srclib/apr/poll/unix/poll.c')
-rw-r--r--srclib/apr/poll/unix/poll.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/srclib/apr/poll/unix/poll.c b/srclib/apr/poll/unix/poll.c
index 3727b5b8..7d157367 100644
--- a/srclib/apr/poll/unix/poll.c
+++ b/srclib/apr/poll/unix/poll.c
@@ -240,12 +240,24 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
{
int ret;
apr_status_t rv = APR_SUCCESS;
- apr_uint32_t i, j;
+#ifdef WIN32
+ apr_interval_time_t orig_timeout = timeout;
+#endif
if (timeout > 0) {
timeout /= 1000;
}
#ifdef WIN32
+ /* WSAPoll() requires at least one socket. */
+ if (pollset->nelts == 0) {
+ *num = 0;
+ if (orig_timeout > 0) {
+ apr_sleep(orig_timeout);
+ return APR_TIMEUP;
+ }
+ return APR_SUCCESS;
+ }
+
ret = WSAPoll(pollset->p->pollset, pollset->nelts, (int)timeout);
#else
ret = poll(pollset->p->pollset, pollset->nelts, timeout);
@@ -258,6 +270,8 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
return APR_TIMEUP;
}
else {
+ apr_uint32_t i, j;
+
for (i = 0, j = 0; i < pollset->nelts; i++) {
if (pollset->p->pollset[i].revents != 0) {
/* Check if the polled descriptor is our
@@ -305,9 +319,8 @@ static apr_status_t impl_pollcb_create(apr_pollcb_t *pollcb,
apr_uint32_t flags)
{
#if APR_HAS_THREADS
- return APR_ENOTIMPL;
-#endif
-
+ return APR_ENOTIMPL;
+#else
pollcb->fd = -1;
#ifdef WIN32
if (!APR_HAVE_LATE_DLL_FUNC(WSAPoll)) {
@@ -319,6 +332,7 @@ static apr_status_t impl_pollcb_create(apr_pollcb_t *pollcb,
pollcb->copyset = apr_palloc(p, size * sizeof(apr_pollfd_t *));
return APR_SUCCESS;
+#endif
}
static apr_status_t impl_pollcb_add(apr_pollcb_t *pollcb,