RFR 8203369 : Check for both EAGAIN and EWOULDBLOCK error codes
David Holmes
david.holmes at oracle.com
Fri May 25 02:44:13 UTC 2018
Hi Ivan,
Just a thought, but just because the actual native function may return
either code, that doesn't mean our native wrapper can't treat them the
same and present them to the Java code as one error?
It seems pointless to double up these condition checks everywhere just
in case there is some platform (do we know of one?) where this may be
necessary.
I also wonder whether a smart compiler might not flag code where the
errors do infact have the same value:
if (errno == 11 || errno == 11) ...
Cheers,
David
On 25/05/2018 6:57 AM, Ivan Gerasimov wrote:
> Hello!
>
> On Unix systems several system calls (including pread, read, readv,
> recvfrom, recvmsg, send, sendfile, sendmsg, sendto) may set errno to
> either EAGAIN or EWOULDBLOCK on the same condition.
>
> On Linux these two constants are the same, but they are not required to
> be the same.
>
> For example, here's an extract from the Linux man page of send():
> EAGAIN or EWOULDBLOCK
> The socket is marked nonblocking and the requested operation would
> block. POSIX.1-2001 allows either error to be returned for this case,
> and does not require these constants to have the same value, so a
> portable application should check for both possibilities.
>
> We should check for both error codes when appropriate.
>
> Would you please help review the fix?
>
> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8203369
> WEBREV: http://cr.openjdk.java.net/~igerasim/8203369/00/webrev/
>
> Thanks!
>
More information about the nio-dev
mailing list