summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2003-08-07 01:13:46 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2003-08-07 01:13:46 +0000
commit7c00f3facc343ea4c141bd3e2c94ff7b6489eb81 (patch)
tree0663d033ddf9ad5a8fd25a8dd8f844c58ce3875d /libjava
parent74711ad99a9adf667ada63802a775559f59aab25 (diff)
downloadgcc-7c00f3facc343ea4c141bd3e2c94ff7b6489eb81.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70217 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog10
-rw-r--r--libjava/java/net/natPlainSocketImplPosix.cc31
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 <gladish@spinnakernet.com>
+ Bryce McKinlay <bryce@mckinlay.net.nz>
+
+ * 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 <bryce@mckinlay.net.nz>
* 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;
}
}