diff --git a/mongoose.c b/mongoose.c
index 94e36954235596f98e7d3a5de4fe0e0bbf893cd4..c67c8d9546eacacd634600a2ab8cf019ae8434a8 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1223,6 +1223,7 @@ static int poll(struct pollfd *pfd, int n, int milliseconds) {
   struct timeval tv;
   fd_set set;
   int i, result;
+  int maxfd = 0;
 
   tv.tv_sec = milliseconds / 1000;
   tv.tv_usec = (milliseconds % 1000) * 1000;
@@ -1231,9 +1232,13 @@ static int poll(struct pollfd *pfd, int n, int milliseconds) {
   for (i = 0; i < n; i++) {
     FD_SET((SOCKET) pfd[i].fd, &set);
     pfd[i].revents = 0;
+
+    if (pfd[i].fd > maxfd) {
+        maxfd = pfd[i].fd;
+    }
   }
 
-  if ((result = select(0, &set, NULL, NULL, &tv)) > 0) {
+  if ((result = select(maxfd+1, &set, NULL, NULL, &tv)) > 0) {
     for (i = 0; i < n; i++) {
       if (FD_ISSET(pfd[i].fd, &set)) {
         pfd[i].revents = POLLIN;