natPlainSocketImplPosix.cc (create): Return if already created.

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233406
	* gnu/java/net/natPlainSocketImplPosix.cc (create): Return if
	already created.
	* gnu/java/net/PlainSocketImpl.java (getLocalAddress): Handle case
	where localport is -1.
	(create): Now public.
	* gnu/java/nio/SocketChannelImpl.java (SocketChannelImpl): Call
	'create' on the socket.

From-SVN: r123440
This commit is contained in:
Tom Tromey 2007-04-02 22:10:41 +00:00 committed by Tom Tromey
parent c8bbabf282
commit c44cc446f7
10 changed files with 21 additions and 3 deletions

View file

@ -1,3 +1,14 @@
2007-04-02 Tom Tromey <tromey@redhat.com>
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233406
* gnu/java/net/natPlainSocketImplPosix.cc (create): Return if
already created.
* gnu/java/net/PlainSocketImpl.java (getLocalAddress): Handle case
where localport is -1.
(create): Now public.
* gnu/java/nio/SocketChannelImpl.java (SocketChannelImpl): Call
'create' on the socket.
2007-04-02 Andrew Haley <aph@redhat.com> 2007-04-02 Andrew Haley <aph@redhat.com>
* java/lang/reflect/natVMProxy.cc (run_proxy): Use * java/lang/reflect/natVMProxy.cc (run_proxy): Use

View file

@ -228,7 +228,9 @@ public final class PlainSocketImpl extends SocketImpl
* *
* @param stream true for a stream socket, false for a datagram socket * @param stream true for a stream socket, false for a datagram socket
*/ */
protected native void create(boolean stream) throws IOException; // FIXME: this is public for nio ... but this is just a hack
// until we upgrade to Classpath's nio.
public native void create(boolean stream) throws IOException;
/** /**
* Connects to the remote hostname and port specified as arguments. * Connects to the remote hostname and port specified as arguments.
@ -336,7 +338,7 @@ public final class PlainSocketImpl extends SocketImpl
{ {
localSocketAddress localSocketAddress
= new InetSocketAddress ((InetAddress) getOption(SocketOptions.SO_BINDADDR), = new InetSocketAddress ((InetAddress) getOption(SocketOptions.SO_BINDADDR),
localport); localport == -1 ? 0 : localport);
} }
catch (SocketException _) catch (SocketException _)
{ {

View file

@ -64,6 +64,10 @@ union SockAddr
void void
gnu::java::net::PlainSocketImpl::create (jboolean stream) gnu::java::net::PlainSocketImpl::create (jboolean stream)
{ {
// We might already have been create()d in the nio case.
if (native_fd != -1)
return;
int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0);
if (sock < 0) if (sock < 0)

View file

@ -1,5 +1,5 @@
/* SocketChannelImpl.java -- /* SocketChannelImpl.java --
Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath. This file is part of GNU Classpath.
@ -71,6 +71,7 @@ public final class SocketChannelImpl extends SocketChannel
{ {
super (provider); super (provider);
impl = new PlainSocketImpl(); impl = new PlainSocketImpl();
impl.create(true);
socket = new NIOSocket (impl, this); socket = new NIOSocket (impl, this);
configureBlocking(true); configureBlocking(true);
} }