Fix closed_fd(): select returning 0 means no fd listening
[ira/wip.git] / source3 / lib / wb_reqtrans.c
index 16d71fe03e36aadc715380e3810ca6bfed1e96bd..038e5bda171d3586c46cd48b399675ea39087933 100644 (file)
@@ -342,6 +342,7 @@ static bool closed_fd(int fd)
 {
        struct timeval tv;
        fd_set r_fds;
+       int selret;
 
        if (fd == -1) {
                return true;
@@ -351,12 +352,14 @@ static bool closed_fd(int fd)
        FD_SET(fd, &r_fds);
        ZERO_STRUCT(tv);
 
-       if ((select(fd+1, &r_fds, NULL, NULL, &tv) == -1)
-           || FD_ISSET(fd, &r_fds)) {
+       selret = select(fd+1, &r_fds, NULL, NULL, &tv);
+       if (selret == -1) {
                return true;
        }
-
-       return false;
+       if (selret == 0) {
+               return false;
+       }
+       return (FD_ISSET(fd, &r_fds));
 }
 
 struct wb_simple_trans_state {