IPv6 support is now merged.
[rsync.git] / io.c
diff --git a/io.c b/io.c
index a451c1337b75e7c619af3f844e7dda8904af6d69..e57d07088ddd8a2b0cc9f4e3c5ca83e7a0d98fa2 100644 (file)
--- a/io.c
+++ b/io.c
@@ -174,6 +174,7 @@ static int read_timeout (int fd, char *buf, int len)
                fd_set fds;
                struct timeval tv;
                int fd_count = fd+1;
+               int count;
 
                FD_ZERO(&fds);
                FD_SET(fd, &fds);
@@ -187,11 +188,16 @@ static int read_timeout (int fd, char *buf, int len)
 
                errno = 0;
 
-               if (select(fd_count, &fds, NULL, NULL, &tv) < 1) {
+               count = select(fd_count, &fds, NULL, NULL, &tv);
+
+               if (count == 0) {
+                       check_timeout();
+               }
+
+               if (count <= 0) {
                        if (errno == EBADF) {
                                exit_cleanup(RERR_SOCKETIO);
                        }
-                       check_timeout();
                        continue;
                }
 
@@ -402,11 +408,14 @@ static void writefd_unbuffered(int fd,char *buf,int len)
                               &w_fds,NULL,
                               &tv);
 
+               if (count == 0) {
+                       check_timeout();
+               }
+
                if (count <= 0) {
                        if (errno == EBADF) {
                                exit_cleanup(RERR_SOCKETIO);
                        }
-                       check_timeout();
                        continue;
                }