Browse Source

patch to let poll() recognize eof on more architectures

svn:r372
Roger Dingledine 21 years ago
parent
commit
60d52a7e08
1 changed files with 6 additions and 2 deletions
  1. 6 2
      src/or/main.c

+ 6 - 2
src/or/main.c

@@ -274,7 +274,8 @@ static void conn_read(int i) {
     connection_free(conn);
     if(i<nfds) { /* we just replaced the one at i with a new one.
                     process it too. */
-      if(poll_array[i].revents & POLLIN) /* something to read */
+      if(poll_array[i].revents & POLLIN ||
+         poll_array[i].revents & POLLHUP ) /* something to read */
         conn_read(i);
     }
   }
@@ -552,8 +553,11 @@ static int do_main_loop(void) {
     if(poll_result > 0) { /* we have at least one connection to deal with */
       /* do all the reads first, so we can detect closed sockets */
       for(i=0;i<nfds;i++)
-        if(poll_array[i].revents & POLLIN) /* something to read */
+        if(poll_array[i].revents & POLLIN ||
+           poll_array[i].revents & POLLHUP ) /* something to read */
           conn_read(i); /* this also blows away broken connections */
+/* see http://www.greenend.org.uk/rjk/2001/06/poll.html for discussion
+ * of POLLIN vs POLLHUP */
 
       /* then do the writes */
       for(i=0;i<nfds;i++)