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
This commit is contained in:
parent
6eac0ef54e
commit
7c6e92558c
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user