From: Bryce McKinlay Date: Thu, 17 Jun 1999 00:21:26 +0000 (+0100) Subject: natPlainSocketImpl.cc (bind): Bind to any/all network interfaces if host==NULL. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1920afb3c6acab2a6166c0d658e6eb412c2b0bbd;p=gcc.git 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 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b5e1ba40b07..64d7363a4c4 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,22 @@ +1999-06-17 Bryce McKinlay + + * 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. + 1999-06-15 Bryce McKinlay * java/io/FilterOutputStream.java (write(byte[])): Rewrite according @@ -56,7 +75,7 @@ 1999-05-30 Anthony Green * java/net/URLStreamHandler.java (parseURL): Parse relative URLs - correctly. Clean up "/../" and "/./" path fragments. + correctly. Clean up "/../" and "/./" path fragments. 1999-05-28 Warren Levy diff --git a/libjava/java/net/PlainDatagramSocketImpl.java b/libjava/java/net/PlainDatagramSocketImpl.java index 90e296f1749..541f00a10d8 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 17c8071ac39..5cff27bdca0 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 96690faad88..0d40bcc9bd6 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 db46db18e45..7dded58937b 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 74de74fd0de..ef2a3cbdf88 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 8ad23cbab69..a41a68157c8 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 (