aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@gcc.gnu.org>1999-06-17 01:21:26 +0100
committerBryce McKinlay <bryce@gcc.gnu.org>1999-06-17 01:21:26 +0100
commit1920afb3c6acab2a6166c0d658e6eb412c2b0bbd (patch)
tree60f913e68f63815df730459c7b350b60a108a045 /libjava/java
parent06c8baef3a8acf2a560db2859207d488a2500047 (diff)
downloadgcc-1920afb3c6acab2a6166c0d658e6eb412c2b0bbd.zip
gcc-1920afb3c6acab2a6166c0d658e6eb412c2b0bbd.tar.gz
gcc-1920afb3c6acab2a6166c0d658e6eb412c2b0bbd.tar.bz2
natPlainSocketImpl.cc (bind): Bind to any/all network interfaces if host==NULL.
* java/net/natPlainSocketImpl.cc (bind): Bind to any/all network interfaces if host==NULL. (accept): Throw message with InterruptedIOException. (getOption): Cache localAddress. * java/net/natPlainDatagramSocketImpl.cc (bind): Don't need 'address' for DatagramSocket. (setTimeToLive): Fix compiler warnings. (getOption): Cache localAddress. * java/net/Socket.java (getLocalAddress): Don't need local InetAddress object. Add FIXME comment about calling checkConnect(). * java/net/ServerSocket.java (ServerSocket(int)): Initialize connection queue to 50 as per JDK 1.2 docs. (ServerSocket(int,int)): Listen on all network interfaces by default, per JDK 1.2 docs. * java/net/PlainDatagramSocketImpl.java: Don't need 'address'. Add localAddress caching. From-SVN: r27559
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/net/PlainDatagramSocketImpl.java7
-rw-r--r--libjava/java/net/PlainSocketImpl.java3
-rw-r--r--libjava/java/net/ServerSocket.java6
-rw-r--r--libjava/java/net/Socket.java5
-rw-r--r--libjava/java/net/natPlainDatagramSocketImpl.cc43
-rw-r--r--libjava/java/net/natPlainSocketImpl.cc58
6 files changed, 72 insertions, 50 deletions
diff --git a/libjava/java/net/PlainDatagramSocketImpl.java b/libjava/java/net/PlainDatagramSocketImpl.java
index 90e296f..541f00a 100644
--- a/libjava/java/net/PlainDatagramSocketImpl.java
+++ b/libjava/java/net/PlainDatagramSocketImpl.java
@@ -38,11 +38,14 @@ class PlainDatagramSocketImpl extends DatagramSocketImpl
int fnum = -1;
// FIXME: Is this necessary? Could it help w/ DatagramSocket.getLocalAddress?
- InetAddress address;
+ // InetAddress address;
+
+ // localAddress cache
+ InetAddress localAddress;
// These values are set/read by setOption/getOption.
int timeout = 0;
- InetAddress iface = null;
+ /* InetAddress iface = null; */
int ttl = -1;
// FIXME: Probably should have bind (and create?) calls from DatagramSocket
diff --git a/libjava/java/net/PlainSocketImpl.java b/libjava/java/net/PlainSocketImpl.java
index 17c8071..5cff27bdc 100644
--- a/libjava/java/net/PlainSocketImpl.java
+++ b/libjava/java/net/PlainSocketImpl.java
@@ -39,6 +39,9 @@ class PlainSocketImpl extends SocketImpl
// This value is set/read by setOption/getOption.
int timeout = 0;
+
+ // localAddress cache
+ InetAddress localAddress;
public native void setOption(int optID, Object value) throws SocketException;
diff --git a/libjava/java/net/ServerSocket.java b/libjava/java/net/ServerSocket.java
index 96690fa..0d40bcc 100644
--- a/libjava/java/net/ServerSocket.java
+++ b/libjava/java/net/ServerSocket.java
@@ -28,15 +28,13 @@ public class ServerSocket
public ServerSocket (int port)
throws java.io.IOException
{
- // FIXME: JCL p. 1526 says backlog defaults to 50; is 5 to save space
- // or a typo?
- this(port, 5);
+ this(port, 50);
}
public ServerSocket (int port, int backlog)
throws java.io.IOException
{
- this(port, backlog, InetAddress.getLocalHost());
+ this(port, backlog, null);
}
public ServerSocket (int port, int backlog, InetAddress bindAddr)
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index db46db1..7dded58 100644
--- a/libjava/java/net/Socket.java
+++ b/libjava/java/net/Socket.java
@@ -129,10 +129,10 @@ public class Socket
public InetAddress getLocalAddress ()
{
- InetAddress localAddress;
+ // FIXME: see note in DatagramSocket.java about checkConnect() and security
try
{
- localAddress = (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
+ return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
}
catch (SocketException x)
{
@@ -140,7 +140,6 @@ public class Socket
System.err.println(x);
throw new java.lang.InternalError("Error in PlainSocketImpl.getOption");
}
- return localAddress;
}
public int getPort ()
diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc
index 74de74f..ef2a3cb 100644
--- a/libjava/java/net/natPlainDatagramSocketImpl.cc
+++ b/libjava/java/net/natPlainDatagramSocketImpl.cc
@@ -111,8 +111,6 @@ java::net::PlainDatagramSocketImpl::bind (jint lport,
goto error;
if (::bind (fnum, ptr, len) == 0)
{
- // FIXME: Is address really necessary to set?
- address = host;
socklen_t addrlen = sizeof(u);
if (lport != 0)
localport = lport;
@@ -270,6 +268,7 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
void
java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
{
+ this->ttl = ttl;
// throws IOException;
// FIXME: TODO - PlainDatagramSocketImpl::setTimeToLive
}
@@ -279,7 +278,7 @@ java::net::PlainDatagramSocketImpl::getTimeToLive ()
{
// throws IOException;
// FIXME: TODO - PlainDatagramSocketImpl::getTimeToLive
- return 0;
+ return ttl;
}
void
@@ -438,25 +437,29 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID)
#endif
break;
case _Jv_SO_BINDADDR_:
- // FIXME: Should cache the laddr as an optimization.
- jbyteArray laddr;
- if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
- goto error;
- if (u.address.sin_family == AF_INET)
- {
- laddr = JvNewByteArray (4);
- memcpy (elements (laddr), &u.address.sin_addr, 4);
- }
+ // cache the local address
+ if (localAddress == NULL)
+ {
+ jbyteArray laddr;
+ if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
+ goto error;
+ if (u.address.sin_family == AF_INET)
+ {
+ laddr = JvNewByteArray (4);
+ memcpy (elements (laddr), &u.address.sin_addr, 4);
+ }
#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- laddr = JvNewByteArray (16);
- memcpy (elements (laddr), &u.address6.sin6_addr, 16);
- }
+ else if (u.address.sin_family == AF_INET6)
+ {
+ laddr = JvNewByteArray (16);
+ memcpy (elements (laddr), &u.address6.sin6_addr, 16);
+ }
#endif
- else
- goto error;
- return new java::net::InetAddress (laddr, NULL);
+ else
+ goto error;
+ localAddress = new java::net::InetAddress (laddr, NULL);
+ }
+ return localAddress;
break;
case _Jv_SO_REUSEADDR_ :
#if defined(SO_REUSEADDR)
diff --git a/libjava/java/net/natPlainSocketImpl.cc b/libjava/java/net/natPlainSocketImpl.cc
index 8ad23cb..a41a681 100644
--- a/libjava/java/net/natPlainSocketImpl.cc
+++ b/libjava/java/net/natPlainSocketImpl.cc
@@ -65,14 +65,25 @@ void
java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
{
union SockAddr u;
- jbyteArray haddress = host->address;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
struct sockaddr *ptr = (struct sockaddr *) &u.address;
+ jbyte *bytes = NULL;
+ // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4.
+ int len = 4; // Initialize for INADDR_ANY in case host is NULL.
+
+ if (host != NULL)
+ {
+ jbyteArray haddress = host->address;
+ bytes = elements (haddress);
+ len = haddress->length;
+ }
+
if (len == 4)
{
u.address.sin_family = AF_INET;
- memcpy (&u.address.sin_addr, bytes, len);
+ if (host != NULL)
+ memcpy (&u.address.sin_addr, bytes, len);
+ else
+ u.address.sin_addr.s_addr = htonl (INADDR_ANY);
len = sizeof (struct sockaddr_in);
u.address.sin_port = htons (lport);
}
@@ -183,7 +194,8 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s)
if ((retval = select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
goto error;
else if (retval == 0)
- JvThrow (new java::io::InterruptedIOException ());
+ JvThrow (new java::io::InterruptedIOException (
+ JvNewStringUTF("Accept timed out")));
}
new_socket = ::accept (fnum, (sockaddr*) &u, &addrlen);
@@ -365,25 +377,29 @@ java::net::PlainSocketImpl::getOption (jint optID)
#endif
break;
case _Jv_SO_BINDADDR_:
- // FIXME: Should cache the laddr as an optimization.
- jbyteArray laddr;
- if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
- goto error;
- if (u.address.sin_family == AF_INET)
+ // cache the local address
+ if (localAddress == NULL)
{
- laddr = JvNewByteArray (4);
- memcpy (elements (laddr), &u.address.sin_addr, 4);
- }
+ jbyteArray laddr;
+ if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
+ goto error;
+ if (u.address.sin_family == AF_INET)
+ {
+ laddr = JvNewByteArray (4);
+ memcpy (elements (laddr), &u.address.sin_addr, 4);
+ }
#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- laddr = JvNewByteArray (16);
- memcpy (elements (laddr), &u.address6.sin6_addr, 16);
- }
+ else if (u.address.sin_family == AF_INET6)
+ {
+ laddr = JvNewByteArray (16);
+ memcpy (elements (laddr), &u.address6.sin6_addr, 16);
+ }
#endif
- else
- goto error;
- return new java::net::InetAddress (laddr, NULL);
+ else
+ goto error;
+ localAddress = new java::net::InetAddress (laddr, NULL);
+ }
+ return localAddress;
break;
case _Jv_IP_MULTICAST_IF_ :
JvThrow (new java::net::SocketException (