#else
nwritten = sendfile(tofd, fromfd, &offset, total);
#endif
- } while (nwritten == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
if (nwritten == -1) {
if (errno == ENOSYS || errno == EINVAL) {
/* Ok - we're in a world of pain here. We just sent
int32 nwritten;
do {
nwritten = sendfile(tofd, fromfd, &small_offset, small_total);
- } while (nwritten == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
if (nwritten == -1) {
if (errno == ENOSYS || errno == EINVAL) {
/* Ok - we're in a world of pain here. We just sent
#else
nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
#endif
- if (nwritten == -1 && errno == EINTR) {
+#if defined(EWOULDBLOCK)
+ if (nwritten == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)) {
+#else
+ if (nwritten == -1 && (errno == EINTR || errno == EAGAIN)) {
+#endif
if (xferred == 0)
continue; /* Nothing written yet. */
else
#else
nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
#endif
- } while (nwritten == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (nwritten == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
if (nwritten == -1)
return -1;
if (nwritten == 0)
do {
ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
if (ret == -1)
return -1;
*/
do {
ret = send_file(&tofd, &hdtrl, 0);
- } while ( (ret == 1) || (ret == -1 && errno == EINTR) );
+#if defined(EWOULDBLOCK)
+ } while ((ret == 1) || (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)));
+#else
+ } while ((ret == 1) || (ret == -1 && (errno == EINTR || errno == EAGAIN)));
+#endif
if ( ret == -1 )
return -1;
}
do {
ret = read(fd, buf, count);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
do {
ret = write(fd, buf, count);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
do {
ret = writev(fd, iov, iovcnt);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
#endif
/*******************************************************************
-A send wrapper that will deal with EINTR.
+A send wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK.
********************************************************************/
ssize_t sys_send(int s, const void *msg, size_t len, int flags)
do {
ret = send(s, msg, len, flags);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
/*******************************************************************
-A sendto wrapper that will deal with EINTR.
+A sendto wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK.
********************************************************************/
ssize_t sys_sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
do {
ret = sendto(s, msg, len, flags, to, tolen);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
/*******************************************************************
-A recv wrapper that will deal with EINTR.
+A recv wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK.
********************************************************************/
ssize_t sys_recv(int fd, void *buf, size_t count, int flags)
do {
ret = recv(fd, buf, count, flags);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}
do {
ret = recvfrom(s, buf, len, flags, from, fromlen);
- } while (ret == -1 && errno == EINTR);
+#if defined(EWOULDBLOCK)
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
return ret;
}