DatagramSocket.java (DatagramSocket(int, InetAddress)): Default to using PlainDatagra...
authorWarren Levy <warrenl@cygnus.com>
Tue, 20 Jul 1999 20:30:42 +0000 (20:30 +0000)
committerWarren Levy <warrenl@gcc.gnu.org>
Tue, 20 Jul 1999 20:30:42 +0000 (20:30 +0000)
* java/net/DatagramSocket.java (DatagramSocket(int, InetAddress)):
Default to using PlainDatagramSocketImpl.
* java/net/PlainDatagramSocketImpl.java (close): Catch IOException.

From-SVN: r28195

libjava/ChangeLog
libjava/java/net/DatagramSocket.java
libjava/java/net/PlainDatagramSocketImpl.java

index 55c384d..9d4e8bc 100644 (file)
@@ -1,3 +1,9 @@
+1999-07-20  Warren Levy  <warrenl@cygnus.com>
+
+       * java/net/DatagramSocket.java (DatagramSocket(int, InetAddress)):
+       Default to using PlainDatagramSocketImpl.
+       * java/net/PlainDatagramSocketImpl.java (close): Catch IOException.
+
 1999-07-19  Tom Tromey  <tromey@cygnus.com>
 
        * include/stamp-h.in: New file.
index 96d9555..3291efe 100644 (file)
@@ -47,9 +47,19 @@ public class DatagramSocket
 
     String propVal = System.getProperty("impl.prefix");
     if (propVal == null || propVal.equals(""))
-      propVal = "Plain";
-    impl = (DatagramSocketImpl) Class.forName("java.net." + propVal +
+      impl = new PlainDatagramSocketImpl();
+    else
+      try
+       {
+         impl = (DatagramSocketImpl) Class.forName("java.net." + propVal +
                                        "DatagramSocketImpl").newInstance();
+       }
+      catch (Exception e)
+       {
+         System.err.println("Could not instantiate class: java.net." +
+           propVal + "DatagramSocketImpl");
+         impl = new PlainDatagramSocketImpl();
+       }
     impl.create();
 
     // For multicasting, set the socket to be reused (Stevens pp. 195-6).
index c658091..a20be1c 100644 (file)
@@ -68,9 +68,24 @@ class PlainDatagramSocketImpl extends DatagramSocketImpl
   private native void mcastGrp(InetAddress inetaddr, boolean join)
        throws IOException;
 
-  protected void close() throws IOException
+  protected void close()
   {
-    fd.close();
+    // FIXME: The close method in each of the DatagramSocket* classes does
+    // not throw an IOException.  The issue is that FileDescriptor.close()
+    // in natFileDescriptorPosix.cc can throw one, so we have to catch
+    // it here.  It seems that FileDescriptor.close is properly throwing
+    // the IOException on errors since many of the java.io classes depend
+    // on that.  This probably requires a bit more research but for now,
+    // we'll catch the IOException here.
+    try
+      {
+        fd.close();
+      }
+    catch (IOException e)
+      {
+       System.err.println("PlainDatagramSocketImpl.close: Error closing - " +
+         e.getMessage());
+      }
   }
 
   // Deprecated in JDK 1.2.