Commit f7b93778 authored by Andrew Tridgell's avatar Andrew Tridgell

handle non-blocking file descriptors for both read and write. Add a

workaround for buggy systems that say there is space to write when
there isn't.
parent a5343e76
...@@ -108,6 +108,15 @@ static int read_timeout(int fd, char *buf, int len) ...@@ -108,6 +108,15 @@ static int read_timeout(int fd, char *buf, int len)
continue; continue;
} }
if (n == -1 &&
(errno == EAGAIN || errno == EWOULDBLOCK)) {
/* this shouldn't happen, if it does then
sleep for a short time to prevent us
chewing too much CPU */
u_sleep(100);
continue;
}
if (n == 0) { if (n == 0) {
if (eof_error) { if (eof_error) {
rprintf(FERROR,"EOF in read_timeout\n"); rprintf(FERROR,"EOF in read_timeout\n");
...@@ -347,6 +356,15 @@ static void writefd_unbuffered(int fd,char *buf,int len) ...@@ -347,6 +356,15 @@ static void writefd_unbuffered(int fd,char *buf,int len)
continue; continue;
} }
if (ret == -1 &&
(errno == EAGAIN || errno == EWOULDBLOCK)) {
/* this shouldn't happen, if it does then
sleep for a short time to prevent us
chewing too much CPU */
u_sleep(100);
continue;
}
if (ret <= 0) { if (ret <= 0) {
rprintf(FERROR,"erroring writing %d bytes - exiting\n", len); rprintf(FERROR,"erroring writing %d bytes - exiting\n", len);
exit_cleanup(1); exit_cleanup(1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment