diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog
index 125388f5d6ff18c98b6b4ee97ec7b2e823c8bec4..85df787cc4d6a265db7bef4c2c0f4d14988b0cd7 100644
--- a/libjava/classpath/ChangeLog
+++ b/libjava/classpath/ChangeLog
@@ -1,3 +1,19 @@
+2005-12-27  Tom Tromey  <tromey@redhat.com>
+
+	* gnu/java/nio/SelectorImpl.java: Added import.
+
+2005-12-26  Anthony Green  <green@redhat.com>
+
+        * java/net/Socket.java (connect): Don't close the socket on
+        exceptions.
+
+        * gnu/java/nio/SocketChannelImpl.java (read): Compute the right amount
+        of data to read (dst.remaining()).
+        * gnu/java/nio/DatagramChannelImpl.java (receive): Ditto.
+
+        * gnu/java/nio/SelectorImpl.java (select): Handle OP_CONNECT
+        properly.
+
 2005-11-17  Roman Kennke  <kennke@aicas.com>
 
 	* javax/swing/JEditorPane.java
diff --git a/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java b/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java
index 51c7031fe694be2419938b46ac4409fb2af73fe1..4687bf3f59ec729f8fc30a182683cce56e64f885 100644
--- a/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java
+++ b/libjava/classpath/gnu/java/nio/DatagramChannelImpl.java
@@ -201,7 +201,7 @@ public final class DatagramChannelImpl extends DatagramChannel
     try
       {
         DatagramPacket packet;
-        int len = dst.capacity() - dst.position();
+        int len = dst.remaining();
         
         if (dst.hasArray())
           {
diff --git a/libjava/classpath/gnu/java/nio/SelectorImpl.java b/libjava/classpath/gnu/java/nio/SelectorImpl.java
index dcafedeb8bbfe6d069ac73174943f7c645fb88bb..e10f71574432b692fcf4e255626300c0dfa59b48 100644
--- a/libjava/classpath/gnu/java/nio/SelectorImpl.java
+++ b/libjava/classpath/gnu/java/nio/SelectorImpl.java
@@ -43,6 +43,7 @@ import java.nio.channels.ClosedSelectorException;
 import java.nio.channels.SelectableChannel;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
+import java.nio.channels.SocketChannel;
 import java.nio.channels.spi.AbstractSelectableChannel;
 import java.nio.channels.spi.AbstractSelector;
 import java.nio.channels.spi.SelectorProvider;
@@ -284,19 +285,18 @@ public class SelectorImpl extends AbstractSelector
                 // Set new ready write ops
                 for (int i = 0; i < write.length; i++)
                   {
-                    if (key.getNativeFD() == write[i])
-                      {
-                        ops = ops | SelectionKey.OP_WRITE;
-
-        //                 if (key.channel ().isConnected ())
-        //                   {
-        //                     ops = ops | SelectionKey.OP_WRITE;
-        //                   }
-        //                 else
-        //                   {
-        //                     ops = ops | SelectionKey.OP_CONNECT;
-        //                   }
-                     }
+		    if (key.getNativeFD() == write[i])
+		      {
+			if (key.channel() instanceof SocketChannel)
+			  {
+			    if (((SocketChannel) key.channel ()).isConnected ())
+			      ops = ops | SelectionKey.OP_WRITE;
+			    else
+			      ops = ops | SelectionKey.OP_CONNECT;
+			  }
+			else
+			  ops = ops | SelectionKey.OP_WRITE;
+		      }
                   }
 
                 // FIXME: We dont handle exceptional file descriptors yet.
diff --git a/libjava/classpath/gnu/java/nio/SocketChannelImpl.java b/libjava/classpath/gnu/java/nio/SocketChannelImpl.java
index fcddbd6c3510daf6c1f62b96ff53431d0c3893b6..680eba2f92b68b9857dfb02b41fd19c0234e4f2d 100644
--- a/libjava/classpath/gnu/java/nio/SocketChannelImpl.java
+++ b/libjava/classpath/gnu/java/nio/SocketChannelImpl.java
@@ -220,7 +220,7 @@ public final class SocketChannelImpl extends SocketChannel
     int offset = 0;
     InputStream input = socket.getInputStream();
     int available = input.available();
-    int len = dst.capacity() - dst.position();
+    int len = dst.remaining();
 	
     if ((! isBlocking()) && available == 0)
       return 0;
diff --git a/libjava/classpath/java/net/Socket.java b/libjava/classpath/java/net/Socket.java
index 0ff6e6ea0321de9380687ec067602fbe6112b7af..b2249ffaa0dded08b9dbbf42b112fec7157a5e37 100644
--- a/libjava/classpath/java/net/Socket.java
+++ b/libjava/classpath/java/net/Socket.java
@@ -437,25 +437,7 @@ public class Socket
     if (! isBound())
       bind(null);
 
-    try
-      {
-	getImpl().connect(endpoint, timeout);
-      }
-    catch (IOException exception)
-      {
-	close();
-	throw exception;
-      }
-    catch (RuntimeException exception)
-      {
-	close();
-	throw exception;
-      }
-    catch (Error error)
-      {
-	close();
-	throw error;
-      }
+    getImpl().connect(endpoint, timeout);
   }
 
   /**