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
This commit is contained in:
parent
06c8baef3a
commit
1920afb3c6
7 changed files with 92 additions and 51 deletions
|
@ -1,3 +1,22 @@
|
||||||
|
1999-06-17 Bryce McKinlay <bryce@albatross.co.nz>
|
||||||
|
|
||||||
|
* 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 <bryce@albatross.co.nz>
|
1999-06-15 Bryce McKinlay <bryce@albatross.co.nz>
|
||||||
|
|
||||||
* java/io/FilterOutputStream.java (write(byte[])): Rewrite according
|
* java/io/FilterOutputStream.java (write(byte[])): Rewrite according
|
||||||
|
@ -56,7 +75,7 @@
|
||||||
1999-05-30 Anthony Green <green@cygnus.com>
|
1999-05-30 Anthony Green <green@cygnus.com>
|
||||||
|
|
||||||
* java/net/URLStreamHandler.java (parseURL): Parse relative URLs
|
* java/net/URLStreamHandler.java (parseURL): Parse relative URLs
|
||||||
correctly. Clean up "/../" and "/./" path fragments.
|
correctly. Clean up "/../" an[Bd "/./" path fragments.
|
||||||
|
|
||||||
1999-05-28 Warren Levy <warrenl@cygnus.com>
|
1999-05-28 Warren Levy <warrenl@cygnus.com>
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,14 @@ class PlainDatagramSocketImpl extends DatagramSocketImpl
|
||||||
int fnum = -1;
|
int fnum = -1;
|
||||||
|
|
||||||
// FIXME: Is this necessary? Could it help w/ DatagramSocket.getLocalAddress?
|
// 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.
|
// These values are set/read by setOption/getOption.
|
||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
InetAddress iface = null;
|
/* InetAddress iface = null; */
|
||||||
int ttl = -1;
|
int ttl = -1;
|
||||||
|
|
||||||
// FIXME: Probably should have bind (and create?) calls from DatagramSocket
|
// FIXME: Probably should have bind (and create?) calls from DatagramSocket
|
||||||
|
|
|
@ -39,6 +39,9 @@ class PlainSocketImpl extends SocketImpl
|
||||||
|
|
||||||
// This value is set/read by setOption/getOption.
|
// This value is set/read by setOption/getOption.
|
||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
|
|
||||||
|
// localAddress cache
|
||||||
|
InetAddress localAddress;
|
||||||
|
|
||||||
public native void setOption(int optID, Object value) throws SocketException;
|
public native void setOption(int optID, Object value) throws SocketException;
|
||||||
|
|
||||||
|
|
|
@ -28,15 +28,13 @@ public class ServerSocket
|
||||||
public ServerSocket (int port)
|
public ServerSocket (int port)
|
||||||
throws java.io.IOException
|
throws java.io.IOException
|
||||||
{
|
{
|
||||||
// FIXME: JCL p. 1526 says backlog defaults to 50; is 5 to save space
|
this(port, 50);
|
||||||
// or a typo?
|
|
||||||
this(port, 5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerSocket (int port, int backlog)
|
public ServerSocket (int port, int backlog)
|
||||||
throws java.io.IOException
|
throws java.io.IOException
|
||||||
{
|
{
|
||||||
this(port, backlog, InetAddress.getLocalHost());
|
this(port, backlog, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerSocket (int port, int backlog, InetAddress bindAddr)
|
public ServerSocket (int port, int backlog, InetAddress bindAddr)
|
||||||
|
|
|
@ -129,10 +129,10 @@ public class Socket
|
||||||
|
|
||||||
public InetAddress getLocalAddress ()
|
public InetAddress getLocalAddress ()
|
||||||
{
|
{
|
||||||
InetAddress localAddress;
|
// FIXME: see note in DatagramSocket.java about checkConnect() and security
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
localAddress = (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
|
return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
|
||||||
}
|
}
|
||||||
catch (SocketException x)
|
catch (SocketException x)
|
||||||
{
|
{
|
||||||
|
@ -140,7 +140,6 @@ public class Socket
|
||||||
System.err.println(x);
|
System.err.println(x);
|
||||||
throw new java.lang.InternalError("Error in PlainSocketImpl.getOption");
|
throw new java.lang.InternalError("Error in PlainSocketImpl.getOption");
|
||||||
}
|
}
|
||||||
return localAddress;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPort ()
|
public int getPort ()
|
||||||
|
|
|
@ -111,8 +111,6 @@ java::net::PlainDatagramSocketImpl::bind (jint lport,
|
||||||
goto error;
|
goto error;
|
||||||
if (::bind (fnum, ptr, len) == 0)
|
if (::bind (fnum, ptr, len) == 0)
|
||||||
{
|
{
|
||||||
// FIXME: Is address really necessary to set?
|
|
||||||
address = host;
|
|
||||||
socklen_t addrlen = sizeof(u);
|
socklen_t addrlen = sizeof(u);
|
||||||
if (lport != 0)
|
if (lport != 0)
|
||||||
localport = lport;
|
localport = lport;
|
||||||
|
@ -270,6 +268,7 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
|
||||||
void
|
void
|
||||||
java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
|
java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
|
||||||
{
|
{
|
||||||
|
this->ttl = ttl;
|
||||||
// throws IOException;
|
// throws IOException;
|
||||||
// FIXME: TODO - PlainDatagramSocketImpl::setTimeToLive
|
// FIXME: TODO - PlainDatagramSocketImpl::setTimeToLive
|
||||||
}
|
}
|
||||||
|
@ -279,7 +278,7 @@ java::net::PlainDatagramSocketImpl::getTimeToLive ()
|
||||||
{
|
{
|
||||||
// throws IOException;
|
// throws IOException;
|
||||||
// FIXME: TODO - PlainDatagramSocketImpl::getTimeToLive
|
// FIXME: TODO - PlainDatagramSocketImpl::getTimeToLive
|
||||||
return 0;
|
return ttl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -438,25 +437,29 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case _Jv_SO_BINDADDR_:
|
case _Jv_SO_BINDADDR_:
|
||||||
// FIXME: Should cache the laddr as an optimization.
|
// cache the local address
|
||||||
jbyteArray laddr;
|
if (localAddress == NULL)
|
||||||
if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
|
{
|
||||||
goto error;
|
jbyteArray laddr;
|
||||||
if (u.address.sin_family == AF_INET)
|
if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
|
||||||
{
|
goto error;
|
||||||
laddr = JvNewByteArray (4);
|
if (u.address.sin_family == AF_INET)
|
||||||
memcpy (elements (laddr), &u.address.sin_addr, 4);
|
{
|
||||||
}
|
laddr = JvNewByteArray (4);
|
||||||
|
memcpy (elements (laddr), &u.address.sin_addr, 4);
|
||||||
|
}
|
||||||
#ifdef HAVE_INET6
|
#ifdef HAVE_INET6
|
||||||
else if (u.address.sin_family == AF_INET6)
|
else if (u.address.sin_family == AF_INET6)
|
||||||
{
|
{
|
||||||
laddr = JvNewByteArray (16);
|
laddr = JvNewByteArray (16);
|
||||||
memcpy (elements (laddr), &u.address6.sin6_addr, 16);
|
memcpy (elements (laddr), &u.address6.sin6_addr, 16);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
goto error;
|
goto error;
|
||||||
return new java::net::InetAddress (laddr, NULL);
|
localAddress = new java::net::InetAddress (laddr, NULL);
|
||||||
|
}
|
||||||
|
return localAddress;
|
||||||
break;
|
break;
|
||||||
case _Jv_SO_REUSEADDR_ :
|
case _Jv_SO_REUSEADDR_ :
|
||||||
#if defined(SO_REUSEADDR)
|
#if defined(SO_REUSEADDR)
|
||||||
|
|
|
@ -65,14 +65,25 @@ void
|
||||||
java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
|
java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
|
||||||
{
|
{
|
||||||
union SockAddr u;
|
union SockAddr u;
|
||||||
jbyteArray haddress = host->address;
|
|
||||||
jbyte *bytes = elements (haddress);
|
|
||||||
int len = haddress->length;
|
|
||||||
struct sockaddr *ptr = (struct sockaddr *) &u.address;
|
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)
|
if (len == 4)
|
||||||
{
|
{
|
||||||
u.address.sin_family = AF_INET;
|
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);
|
len = sizeof (struct sockaddr_in);
|
||||||
u.address.sin_port = htons (lport);
|
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)
|
if ((retval = select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
else if (retval == 0)
|
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);
|
new_socket = ::accept (fnum, (sockaddr*) &u, &addrlen);
|
||||||
|
@ -365,25 +377,29 @@ java::net::PlainSocketImpl::getOption (jint optID)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case _Jv_SO_BINDADDR_:
|
case _Jv_SO_BINDADDR_:
|
||||||
// FIXME: Should cache the laddr as an optimization.
|
// cache the local address
|
||||||
jbyteArray laddr;
|
if (localAddress == NULL)
|
||||||
if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
|
|
||||||
goto error;
|
|
||||||
if (u.address.sin_family == AF_INET)
|
|
||||||
{
|
{
|
||||||
laddr = JvNewByteArray (4);
|
jbyteArray laddr;
|
||||||
memcpy (elements (laddr), &u.address.sin_addr, 4);
|
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
|
#ifdef HAVE_INET6
|
||||||
else if (u.address.sin_family == AF_INET6)
|
else if (u.address.sin_family == AF_INET6)
|
||||||
{
|
{
|
||||||
laddr = JvNewByteArray (16);
|
laddr = JvNewByteArray (16);
|
||||||
memcpy (elements (laddr), &u.address6.sin6_addr, 16);
|
memcpy (elements (laddr), &u.address6.sin6_addr, 16);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
goto error;
|
goto error;
|
||||||
return new java::net::InetAddress (laddr, NULL);
|
localAddress = new java::net::InetAddress (laddr, NULL);
|
||||||
|
}
|
||||||
|
return localAddress;
|
||||||
break;
|
break;
|
||||||
case _Jv_IP_MULTICAST_IF_ :
|
case _Jv_IP_MULTICAST_IF_ :
|
||||||
JvThrow (new java::net::SocketException (
|
JvThrow (new java::net::SocketException (
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue