From 7c6e92558c74d538f6790a81178b8cbe21f9dedc Mon Sep 17 00:00:00 2001 From: Jacob Gladish Date: Thu, 7 Aug 2003 01:13:46 +0000 Subject: [PATCH] natPlainSocketImplPosix.cc (connect): Pass the FD as a ready-to-write argument to _Jv_Select. * java/net/natPlainSocketImplPosix.cc (connect): Pass the FD as a ready-to-write argument to _Jv_Select. Reset the socket back to non-blocking state after connecting. (accept): Pass the FD as a ready-to-write argument to _Jv_Select. Throw SocketTimeoutException not InterruptedIOException. (read): Throw SocketTimeoutException not InterruptedIOException. Co-Authored-By: Bryce McKinlay From-SVN: r70217 --- libjava/ChangeLog | 10 +++++++ libjava/java/net/natPlainSocketImplPosix.cc | 31 +++++++++++---------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 04307791bde..e773c70c6f0 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2003-08-07 Jacob Gladish + Bryce McKinlay + + * java/net/natPlainSocketImplPosix.cc (connect): Pass the FD as a + ready-to-write argument to _Jv_Select. Reset the socket back to + non-blocking state after connecting. + (accept): Pass the FD as a ready-to-write argument to _Jv_Select. + Throw SocketTimeoutException not InterruptedIOException. + (read): Throw SocketTimeoutException not InterruptedIOException. + 2003-08-07 Bryce McKinlay * java/lang/Thread.java (Thread): Check for null "name" from diff --git a/libjava/java/net/natPlainSocketImplPosix.cc b/libjava/java/net/natPlainSocketImplPosix.cc index 65feac87324..f2a71b68a02 100644 --- a/libjava/java/net/natPlainSocketImplPosix.cc +++ b/libjava/java/net/natPlainSocketImplPosix.cc @@ -174,19 +174,21 @@ java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr, if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS)) goto error; - fd_set rset; + fd_set fset; struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); + FD_ZERO(&fset); + FD_SET(fnum, &fset); tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; int retval; - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + if ((retval = _Jv_select (fnum + 1, &fset, &fset, NULL, &tv)) < 0) goto error; else if (retval == 0) throw new java::net::SocketTimeoutException (JvNewStringUTF ("Connect timed out")); + // Set the socket back into a blocking state. + ::fcntl (fnum, F_SETFL, flags); } else { @@ -233,17 +235,17 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) // Do timeouts via select since SO_RCVTIMEO is not always available. if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE) { - fd_set rset; + fd_set fset; struct timeval tv; - FD_ZERO(&rset); - FD_SET(fnum, &rset); + FD_ZERO(&fset); + FD_SET(fnum, &fset); tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; int retval; - if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0) + if ((retval = _Jv_select (fnum + 1, &fset, &fset, NULL, &tv)) < 0) goto error; else if (retval == 0) - throw new java::io::InterruptedIOException ( + throw new java::net::SocketTimeoutException ( JvNewStringUTF("Accept timed out")); } @@ -402,7 +404,7 @@ java::net::PlainSocketImpl::read(void) // If select returns 0 we've waited without getting data... // that means we've timed out. if (sel_retval == 0) - throw new java::io::InterruptedIOException + throw new java::net::SocketTimeoutException (JvNewStringUTF ("read timed out") ); // If select returns ok we know we either got signalled or read some data... // either way we need to try to read. @@ -467,11 +469,10 @@ java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count) // the socket to see what happened. if (sel_retval == 0) { - java::io::InterruptedIOException *iioe = - new java::io::InterruptedIOException - (JvNewStringUTF ("read interrupted")); - iioe->bytesTransferred = 0; - throw iioe; + java::net::SocketTimeoutException *timeoutException = + new java::net::SocketTimeoutException + (JvNewStringUTF ("read timed out")); + throw timeoutException; } }