aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/net
diff options
context:
space:
mode:
authorJacob Gladish <gladish@spinnakernet.com>2003-08-07 01:13:46 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2003-08-07 02:13:46 +0100
commit7c6e92558c74d538f6790a81178b8cbe21f9dedc (patch)
tree0663d033ddf9ad5a8fd25a8dd8f844c58ce3875d /libjava/java/net
parent6eac0ef54eba75e34876c600199e30d290747b13 (diff)
downloadgcc-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.cc31
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;
}
}