Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

implement aeWait using poll(2). Fixes issue #267.

  • Loading branch information...
commit 7b4dc9b979c993410eeb87eddb2bb60d086825a4 1 parent 95c6a1a
jokea jokea authored antirez committed
Showing with 11 additions and 13 deletions.
  1. +11 −13 src/ae.c
24 src/ae.c
View
@@ -35,6 +35,8 @@
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
+#include <poll.h>
+#include <string.h>
#include "ae.h"
#include "zmalloc.h"
@@ -358,21 +360,17 @@ int aeProcessEvents(aeEventLoop *eventLoop, int flags)
/* Wait for millseconds until the given file descriptor becomes
* writable/readable/exception */
int aeWait(int fd, int mask, long long milliseconds) {
- struct timeval tv;
- fd_set rfds, wfds, efds;
+ struct pollfd pfd;
int retmask = 0, retval;
- tv.tv_sec = milliseconds/1000;
- tv.tv_usec = (milliseconds%1000)*1000;
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- FD_ZERO(&efds);
-
- if (mask & AE_READABLE) FD_SET(fd,&rfds);
- if (mask & AE_WRITABLE) FD_SET(fd,&wfds);
- if ((retval = select(fd+1, &rfds, &wfds, &efds, &tv)) > 0) {
- if (FD_ISSET(fd,&rfds)) retmask |= AE_READABLE;
- if (FD_ISSET(fd,&wfds)) retmask |= AE_WRITABLE;
+ memset(&pfd, 0, sizeof(pfd));
+ pfd.fd = fd;
+ if (mask & AE_READABLE) pfd.events |= POLLIN;
+ if (mask & AE_WRITABLE) pfd.events |= POLLOUT;
+
+ if ((retval = poll(&pfd, 1, milliseconds))== 1) {
+ if (pfd.revents & POLLIN) retmask |= AE_READABLE;
+ if (pfd.revents & POLLOUT) retmask |= AE_WRITABLE;
return retmask;
} else {
return retval;
Please sign in to comment.
Something went wrong with that request. Please try again.