diff options
author | Jacob Gladish <gladish@spinnakernet.com> | 2003-08-07 01:13:46 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2003-08-07 02:13:46 +0100 |
commit | 7c6e92558c74d538f6790a81178b8cbe21f9dedc (patch) | |
tree | 0663d033ddf9ad5a8fd25a8dd8f844c58ce3875d /libjava/java/net | |
parent | 6eac0ef54eba75e34876c600199e30d290747b13 (diff) | |
download | gcc-7c6e92558c74d538f6790a81178b8cbe21f9dedc.zip gcc-7c6e92558c74d538f6790a81178b8cbe21f9dedc.tar.gz gcc-7c6e92558c74d538f6790a81178b8cbe21f9dedc.tar.bz2 |
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 <bryce@mckinlay.net.nz>
From-SVN: r70217
Diffstat (limited to 'libjava/java/net')
-rw-r--r-- | libjava/java/net/natPlainSocketImplPosix.cc | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/libjava/java/net/natPlainSocketImplPosix.cc b/libjava/java/net/natPlainSocketImplPosix.cc index 65feac8..f2a71b6 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; } } |