aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2002-09-11 10:16:00 +0000
committerMichael Koch <konqueror@gmx.de>2002-09-11 10:16:00 +0000
commitf656d986d4bf81d6a389571824898f46822c4243 (patch)
tree29b4d322e1afd2e63388601bec364509ef956429 /libjava
parent3b45fe685155f7c56723353bb564cc584b0ed106 (diff)
2002-09-11 Michael Koch <konqueror@gmx.de>
* java/net/Socket.java (Socket): protected to public (since JDK 1.4). Added @specnote. (bind): New method. (connect): Two new methods. (getKeepalive): Get correct socket option. (setKeepalive): Set correct socket option. (getOOBInline): New method. (setOOBInline): New method. * java/net/ServerSocket.java (bind): Two new methods. (getInetAddress): Reimplemented, catch exception. (getLocalSocketAddress): New method. (setReuseAddress): New method. (getReuseAdress): New method. (setReceiveBufferSize): New method. (getReceiveBufferSize): New method. (toString): Made string JDK 1.4 compliant. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@57032 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog20
-rw-r--r--libjava/java/net/ServerSocket.java158
-rw-r--r--libjava/java/net/Socket.java95
3 files changed, 268 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 9ba93259a1f..96476e7dbf1 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,23 @@
+2002-09-11 Michael Koch <konqueror@gmx.de>
+
+ * java/net/Socket.java
+ (Socket): protected to public (since JDK 1.4). Added @specnote.
+ (bind): New method.
+ (connect): Two new methods.
+ (getKeepalive): Get correct socket option.
+ (setKeepalive): Set correct socket option.
+ (getOOBInline): New method.
+ (setOOBInline): New method.
+ * java/net/ServerSocket.java
+ (bind): Two new methods.
+ (getInetAddress): Reimplemented, catch exception.
+ (getLocalSocketAddress): New method.
+ (setReuseAddress): New method.
+ (getReuseAdress): New method.
+ (setReceiveBufferSize): New method.
+ (getReceiveBufferSize): New method.
+ (toString): Made string JDK 1.4 compliant.
+
2002-09-10 Michael Koch <konqueror@gmx.de>
* java/net/SocketImpl.java
diff --git a/libjava/java/net/ServerSocket.java b/libjava/java/net/ServerSocket.java
index 788057d1384..c6b187071ec 100644
--- a/libjava/java/net/ServerSocket.java
+++ b/libjava/java/net/ServerSocket.java
@@ -152,13 +152,67 @@ public class ServerSocket
}
/**
+ * Binds the server socket to a specified socket address
+ *
+ * @param endpoint The socket address to bind to
+ *
+ * @exception IOException If an error occurs
+ *
+ * @since 1.4
+ */
+ public void bind (SocketAddress endpoint)
+ throws IOException
+ {
+ if (impl == null)
+ throw new IOException ("Cannot initialize Socket implementation");
+
+ InetSocketAddress tmp = (InetSocketAddress) endpoint;
+
+ SecurityManager s = System.getSecurityManager ();
+ if (s != null)
+ s.checkListen (tmp.getPort ());
+
+ impl.bind (tmp.getAddress (), tmp.getPort ());
+ }
+
+ /**
+ * Binds the server socket to a specified socket address
+ *
+ * @param endpoint The socket address to bind to
+ * @param backlog The length of the pending connection queue
+ * @exception IOException If an error occurs
+ */
+ public void bind (SocketAddress endpoint, int backlog)
+ throws java.io.IOException
+ {
+ if (impl == null)
+ throw new IOException ("Cannot initialize Socket implementation");
+
+ InetSocketAddress tmp = (InetSocketAddress) endpoint;
+
+ SecurityManager s = System.getSecurityManager ();
+ if (s != null)
+ s.checkListen (tmp.getPort ());
+
+ impl.bind (tmp.getAddress (), tmp.getPort ());
+ impl.listen(backlog);
+ }
+
+ /**
* This method returns the local address to which this socket is bound
*
* @return The socket's local address
*/
public InetAddress getInetAddress()
{
- return impl.getInetAddress();
+ try
+ {
+ return (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR);
+ }
+ catch (SocketException e)
+ {
+ return null;
+ }
}
/**
@@ -172,6 +226,21 @@ public class ServerSocket
}
/**
+ * Returns the local socket address
+ *
+ * @since 1.4
+ */
+ public SocketAddress getLocalSocketAddress()
+ {
+ InetAddress addr = getInetAddress();
+
+ if (addr != null)
+ return new InetSocketAddress (getInetAddress(), getLocalPort());
+
+ return null;
+ }
+
+ /**
* Accepts a new connection and returns a connected <code>Socket</code>
* instance representing that connection. This method will block until a
* connection is available.
@@ -255,13 +324,98 @@ public class ServerSocket
}
/**
+ * Enables/Disables the SO_REUSEADDR option
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @since 1.4
+ */
+ public void setReuseAddress (boolean on)
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException ("Cannot initialize Socket implementation");
+
+ impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on));
+ }
+
+ /**
+ * Checks if the SO_REUSEADDR option is enabled
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @since 1.4
+ */
+ public boolean getReuseAddress()
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException ("Cannot initialize Socket implementation");
+
+ Object reuseaddr = impl.getOption (SocketOptions.SO_REUSEADDR);
+
+ if (!(reuseaddr instanceof Boolean))
+ throw new SocketException ("Internal Error");
+
+ return ((Boolean) reuseaddr).booleanValue ();
+ }
+
+ /**
+ * This method sets the value for the system level socket option
+ * SO_RCVBUF to the specified value. Note that valid values for this
+ * option are specific to a given operating system.
+ *
+ * @param size The new receive buffer size.
+ *
+ * @exception SocketException If an error occurs or Socket is not connected
+ *
+ * @since 1.4
+ */
+ public void setReceiveBufferSize (int size)
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException ("Not connected");
+
+ if (size <= 0)
+ throw new IllegalArgumentException ("SO_RCVBUF value must be > 0");
+
+ impl.setOption (SocketOptions.SO_RCVBUF, new Integer (size));
+ }
+
+ /**
+ * This method returns the value of the system level socket option
+ * SO_RCVBUF, which is used by the operating system to tune buffer
+ * sizes for data transfers.
+ *
+ * @return The receive buffer size.
+ *
+ * @exception SocketException If an error occurs or Socket is not connected
+ *
+ * @since 1.4
+ */
+ public int getReceiveBufferSize ()
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException ("Not connected");
+
+ Object buf = impl.getOption (SocketOptions.SO_RCVBUF);
+
+ if (!(buf instanceof Integer))
+ throw new SocketException ("Internal Error: Unexpected type");
+
+ return ((Integer) buf).intValue ();
+ }
+
+ /**
* Returns the value of this socket as a <code>String</code>.
*
* @return This socket represented as a <code>String</code>.
*/
public String toString ()
{
- return "ServerSocket " + impl.toString();
+ return "ServerSocket" + impl.toString();
}
// Class methods
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index 217e6956b5b..078bfff7a03 100644
--- a/libjava/java/net/Socket.java
+++ b/libjava/java/net/Socket.java
@@ -84,8 +84,10 @@ public class Socket
* Initializes a new instance of <code>Socket</code> object without
* connecting to a remote host. This useful for subclasses of socket that
* might want this behavior.
+ *
+ * @specnote This constructor is public since JDK 1.4
*/
- protected Socket ()
+ public Socket ()
{
if (factory != null)
impl = factory.createSocketImpl();
@@ -266,6 +268,56 @@ public class Socket
}
/**
+ * Binds the socket to the givent local address/port
+ *
+ * @param bindpoint The address/port to bind to
+ *
+ * @exception If an error occurs
+ *
+ * @since 1.4
+ */
+ public void bind (SocketAddress bindpoint) throws IOException
+ {
+ if ( !(bindpoint instanceof InetSocketAddress))
+ throw new IllegalArgumentException ();
+
+ InetSocketAddress tmp = (InetSocketAddress) bindpoint;
+ impl.bind (tmp.getAddress(), tmp.getPort());
+ }
+
+ /**
+ * Connects the socket with a remote address.
+ *
+ * @param endpoint The address to connect to
+ *
+ * @exception IOException If an error occurs
+ *
+ * @since 1.4
+ */
+ public void connect (SocketAddress endpoint)
+ throws IOException
+ {
+ impl.connect (endpoint, 0);
+ }
+
+ /**
+ * Connects the socket with a remote address. A timeout of zero is
+ * interpreted as an infinite timeout. The connection will then block
+ * until established or an error occurs.
+ *
+ * @param endpoint The address to connect to
+ *
+ * @exception IOException If an error occurs
+ *
+ * @since 1.4
+ */
+ public void connect (SocketAddress endpoint, int timeout)
+ throws IOException
+ {
+ impl.connect (endpoint, timeout);
+ }
+
+ /**
* Returns the address of the remote end of the socket. If this socket
* is not connected, then <code>null</code> is returned.
*
@@ -473,6 +525,43 @@ public class Socket
}
/**
+ * Enables/disables the SO_OOBINLINE option
+ *
+ * @param on True if SO_OOBLINE should be enabled
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @since 1.4
+ */
+ public void setOOBInline (boolean on) throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException("Not connected");
+
+ impl.setOption(SocketOptions.SO_OOBINLINE, new Boolean(on));
+ }
+
+ /**
+ * Returns the current setting of the SO_OOBINLINE option for this socket
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @since 1.4
+ */
+ public boolean getOOBInline () throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException("Not connected");
+
+ Object buf = impl.getOption(SocketOptions.SO_OOBINLINE);
+
+ if (buf instanceof Boolean)
+ return(((Boolean)buf).booleanValue());
+ else
+ throw new SocketException("Internal Error: Unexpected type");
+ }
+
+ /**
* Sets the value of the SO_TIMEOUT option on the socket. If this value
* is set, and an read/write is performed that does not complete within
* the timeout period, a short count is returned (or an EWOULDBLOCK signal
@@ -632,7 +721,7 @@ public class Socket
if (impl == null)
throw new SocketException("Not connected");
- impl.setOption(SocketOptions.SO_RCVBUF, new Boolean(on));
+ impl.setOption(SocketOptions.SO_KEEPALIVE, new Boolean(on));
}
/**
@@ -650,7 +739,7 @@ public class Socket
if (impl == null)
throw new SocketException("Not connected");
- Object buf = impl.getOption(SocketOptions.SO_RCVBUF);
+ Object buf = impl.getOption(SocketOptions.SO_KEEPALIVE);
if (buf instanceof Boolean)
return(((Boolean)buf).booleanValue());