< prev index next >
src/java.base/unix/native/libnio/ch/IOUtil.c
Print this page
rev 50258 : [mq]: 8203369-Check-for-both-EAGAIN-and-EWOULDBLOCK-error-codes
@@ -118,11 +118,11 @@
int tn = 0;
for (;;) {
int n = read(fd, buf, sizeof(buf));
tn += n;
- if ((n < 0) && (errno != EAGAIN))
+ if ((n < 0) && (errno != EAGAIN && errno != EWOULDBLOCK))
JNU_ThrowIOExceptionWithLastError(env, "Drain");
if (n == (int)sizeof(buf))
continue;
return (tn > 0) ? JNI_TRUE : JNI_FALSE;
}
@@ -134,11 +134,11 @@
int res;
char buf[1];
res = read(fd, buf, 1);
if (res < 0) {
- if (errno == EAGAIN) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
res = 0;
} else if (errno == EINTR) {
return IOS_INTERRUPTED;
} else {
JNU_ThrowIOExceptionWithLastError(env, "read");
@@ -185,11 +185,11 @@
return IOS_EOF; /* EOF is -1 in javaland */
} else {
return 0;
}
}
- else if (errno == EAGAIN)
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
return IOS_UNAVAILABLE;
else if (errno == EINTR)
return IOS_INTERRUPTED;
else {
const char *msg = reading ? "Read failed" : "Write failed";
@@ -210,11 +210,11 @@
return IOS_EOF; /* EOF is -1 in javaland */
} else {
return 0;
}
}
- else if (errno == EAGAIN)
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
return IOS_UNAVAILABLE;
else if (errno == EINTR)
return IOS_INTERRUPTED;
else {
const char *msg = reading ? "Read failed" : "Write failed";
< prev index next >