X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6d7b6081ac4c224f571fb7e90d437e3c118fae6c..14175f1e7700e4e800692fc2c466cbd27a60176e:/io.c diff --git a/io.c b/io.c index 540ef2ab..fbaf6a3a 100644 --- a/io.c +++ b/io.c @@ -49,6 +49,7 @@ void setup_readbuffer(int f_in) static void check_timeout(void) { + extern int am_server, am_daemon; time_t t; if (!io_timeout) return; @@ -61,8 +62,10 @@ static void check_timeout(void) t = time(NULL); if (last_io && io_timeout && (t-last_io) >= io_timeout) { - rprintf(FERROR,"io timeout after %d second - exiting\n", - (int)(t-last_io)); + if (!am_server && !am_daemon) { + rprintf(FERROR,"io timeout after %d second - exiting\n", + (int)(t-last_io)); + } exit_cleanup(RERR_TIMEOUT); } } @@ -159,6 +162,11 @@ static int read_timeout(int fd, char *buf, int len) continue; } + if (n == -1 && + (errno == EWOULDBLOCK || errno == EAGAIN)) { + continue; + } + if (n == 0) { if (eof_error) { @@ -364,12 +372,17 @@ static void writefd_unbuffered(int fd,char *buf,int len) if (FD_ISSET(fd, &w_fds)) { int ret, n = len-total; - ret = write(fd,buf+total,n?n:1); + ret = write(fd,buf+total,n); if (ret == -1 && errno == EINTR) { continue; } + if (ret == -1 && + (errno == EWOULDBLOCK || errno == EAGAIN)) { + continue; + } + if (ret <= 0) { rprintf(FERROR,"erroring writing %d bytes - exiting\n", len); exit_cleanup(RERR_STREAMIO); @@ -599,3 +612,4 @@ void io_close_input(int fd) { buffer_f_in = -1; } +