From 927818a5984c6fe521cd8e6c9a11c7f3599a87a5 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Sat, 11 Jan 2003 01:17:19 +0000 Subject: [PATCH] 2003-01-10 Michael Koch * java/net/DatagramSocket.java (ch): Description added. (remotePort): Initialize with -1. (connect): Doesnt throws SocketException. * java/net/MulticastSocket.java (setInterface): Merge with Classpath. * java/net/ServerSocket.java (closed): New member variable. (bind): Check if socket is closed. (close): Close an associated channel too, set new value to closed. (isBound): Reindented. (isClosed): Implemented. * java/net/Socket.java (closed): New member variable. (bind): Check if socket is closed. (connect): Check if socket is closed. (close): Close an associated channel too, set new value to closed. (isClosed): Implemented. From-SVN: r61185 --- libjava/ChangeLog | 21 +++++++++++++++++++++ libjava/java/net/DatagramSocket.java | 14 +++++++++++--- libjava/java/net/MulticastSocket.java | 13 ++++++++----- libjava/java/net/ServerSocket.java | 16 +++++++++++++--- libjava/java/net/Socket.java | 19 +++++++++++++++++-- 5 files changed, 70 insertions(+), 13 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 562a6af..e4d66e9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,26 @@ 2003-01-10 Michael Koch + * java/net/DatagramSocket.java + (ch): Description added. + (remotePort): Initialize with -1. + (connect): Doesnt throws SocketException. + * java/net/MulticastSocket.java + (setInterface): Merge with Classpath. + * java/net/ServerSocket.java + (closed): New member variable. + (bind): Check if socket is closed. + (close): Close an associated channel too, set new value to closed. + (isBound): Reindented. + (isClosed): Implemented. + * java/net/Socket.java + (closed): New member variable. + (bind): Check if socket is closed. + (connect): Check if socket is closed. + (close): Close an associated channel too, set new value to closed. + (isClosed): Implemented. + +2003-01-10 Michael Koch + * java/awt/DisplayMode.java (equals): Fixed argument type and implementation. diff --git a/libjava/java/net/DatagramSocket.java b/libjava/java/net/DatagramSocket.java index 2cef7b4..c286d65 100644 --- a/libjava/java/net/DatagramSocket.java +++ b/libjava/java/net/DatagramSocket.java @@ -72,6 +72,10 @@ public class DatagramSocket */ DatagramSocketImpl impl; + /** + * The unique DatagramChannel object associated with this datagram socket, + * or null. + */ DatagramChannel ch; /** @@ -82,7 +86,7 @@ public class DatagramSocket /** * This is the port we are "connected" to */ - private int remotePort; + private int remotePort = -1; /** * Creates a DatagramSocket from a specified DatagramSocketImpl instance @@ -439,7 +443,6 @@ public class DatagramSocket * @since 1.2 */ public void connect(InetAddress address, int port) - throws SocketException { if (address == null) throw new IllegalArgumentException ("Address may not be null"); @@ -451,10 +454,15 @@ public class DatagramSocket if (sm != null) sm.checkAccept(address.getHostName (), port); + try + { impl.connect (address, port); - remoteAddress = address; remotePort = port; + } + catch (SocketException e) + { + } } /** diff --git a/libjava/java/net/MulticastSocket.java b/libjava/java/net/MulticastSocket.java index 2700ebe..2535a48 100644 --- a/libjava/java/net/MulticastSocket.java +++ b/libjava/java/net/MulticastSocket.java @@ -1,5 +1,6 @@ /* MulticastSocket.java -- Class for using multicast sockets - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -163,13 +164,15 @@ public class MulticastSocket extends DatagramSocket /** * Sets the interface to use for sending multicast packets. * - * @param inf The new interface to use + * @param addr The new interface to use. * - * @exception SocketException If an error occurs + * @exception SocketException If an error occurs. + * + * @since 1.4 */ - public void setInterface(InetAddress inf) throws SocketException + public void setInterface(InetAddress addr) throws SocketException { - impl.setOption(SocketOptions.IP_MULTICAST_IF, inf); + impl.setOption(SocketOptions.IP_MULTICAST_IF, addr); } /** diff --git a/libjava/java/net/ServerSocket.java b/libjava/java/net/ServerSocket.java index 62917b6..e2f8e63 100644 --- a/libjava/java/net/ServerSocket.java +++ b/libjava/java/net/ServerSocket.java @@ -77,6 +77,8 @@ public class ServerSocket */ private ServerSocketChannel ch; + private boolean closed = false; + /** * Constructor that simply sets the implementation. * @@ -200,6 +202,9 @@ public class ServerSocket */ public void bind (SocketAddress endpoint, int backlog) throws IOException { + if (closed) + throw new SocketException ("ServerSocket is closed"); + if (impl == null) throw new IOException ("Cannot initialize Socket implementation"); @@ -315,7 +320,13 @@ public class ServerSocket */ public void close () throws IOException { - impl.close(); + if (impl != null) + impl.close (); + + if (ch != null) + ch.close (); + + closed = true; } /** @@ -358,8 +369,7 @@ public class ServerSocket */ public boolean isClosed() { - // FIXME: implement this - return false; + return closed; } /** diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java index 592f39a..e57c1ed 100644 --- a/libjava/java/net/Socket.java +++ b/libjava/java/net/Socket.java @@ -85,6 +85,8 @@ public class Socket SocketChannel ch; // this field must have been set if created by SocketChannel + private boolean closed = false; + // Constructors /** @@ -308,6 +310,9 @@ public class Socket */ public void bind (SocketAddress bindpoint) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if ( !(bindpoint instanceof InetSocketAddress)) throw new IllegalArgumentException (); @@ -330,6 +335,9 @@ public class Socket public void connect (SocketAddress endpoint) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); @@ -357,6 +365,9 @@ public class Socket public void connect (SocketAddress endpoint, int timeout) throws IOException { + if (closed) + throw new SocketException ("Socket is closed"); + if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); @@ -853,6 +864,11 @@ public class Socket { if (impl != null) impl.close(); + + if (ch != null) + ch.close(); + + closed = true; } /** @@ -1035,8 +1051,7 @@ public class Socket */ public boolean isClosed () { - // FIXME: implement this. - return false; + return closed; } /** -- 2.7.4