natPlainSocketImplPosix.cc (connect): Pass the FD as a ready-to-write argument to...
authorJacob Gladish <gladish@spinnakernet.com>
Thu, 7 Aug 2003 01:13:46 +0000 (01:13 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Thu, 7 Aug 2003 01:13:46 +0000 (02:13 +0100)
* 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

libjava/ChangeLog
libjava/java/net/natPlainSocketImplPosix.cc

index 0430779..e773c70 100644 (file)
@@ -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
index 65feac8..f2a71b6 100644 (file)
@@ -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;
         }
     }