You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2008/12/03 18:04:01 UTC
svn commit: r722971 - in /harmony/enhanced/classlib/trunk/modules:
luni/src/main/java/java/net/ luni/src/main/java/org/apache/harmony/luni/net/
luni/src/main/java/org/apache/harmony/luni/platform/
luni/src/test/api/common/org/apache/harmony/luni/tests/...
Author: tellison
Date: Wed Dec 3 09:03:59 2008
New Revision: 722971
URL: http://svn.apache.org/viewvc?rev=722971&view=rev
Log:
Refactoring and fixing more networking code
- remove createSocket() call, now use either createStreamSocket() or createDatagramSocket()
- remove SocketImplProvider, and in-line the few static methods it had
- remove PlainServerSocketImpl, it is sufficient to use PlainSocketImpl
- remove PlainSocketImpl2, it is sufficient to use PlainSocketImpl
- fix bug in NIO SocketChannelImpl to map Inet ANY address to Localhost on connect request
- workaround bug in NIO SocketChannelImpl that flips non-blocking socket to blocking during finishConnect
Removed:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainServerSocketImpl.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl2.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/SocketImplProvider.java
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/DatagramSocket.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/InetAddress.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/MulticastSocket.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/ServerSocket.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Socket.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainDatagramSocketImpl.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/DatagramSocketTest.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/ServerSocketTest.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java
harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/DatagramChannelImpl.java
harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java
harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/DatagramSocket.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/DatagramSocket.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/DatagramSocket.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/DatagramSocket.java Wed Dec 3 09:03:59 2008
@@ -20,9 +20,8 @@
import java.io.IOException;
import java.nio.channels.DatagramChannel;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainDatagramSocketImpl;
import org.apache.harmony.luni.platform.Platform;
-
import org.apache.harmony.luni.util.Msg;
/**
@@ -188,7 +187,7 @@
synchronized void createSocket(int aPort, InetAddress addr)
throws SocketException {
impl = factory != null ? factory.createDatagramSocketImpl()
- : SocketImplProvider.getDatagramSocketImpl();
+ : new PlainDatagramSocketImpl();
impl.create();
try {
impl.bind(aPort, addr);
@@ -561,7 +560,7 @@
checkListen(((InetSocketAddress) localAddr).getPort());
}
impl = factory != null ? factory.createDatagramSocketImpl()
- : SocketImplProvider.getDatagramSocketImpl();
+ : new PlainDatagramSocketImpl();
impl.create();
if (localAddr != null) {
try {
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/InetAddress.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/InetAddress.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/InetAddress.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/InetAddress.java Wed Dec 3 09:03:59 2008
@@ -913,7 +913,7 @@
// define traffic only for parameter
int traffic = 0;
boolean reached = false;
- NETIMPL.createSocket(fd, NetUtil.preferIPv4Stack());
+ NETIMPL.createStreamSocket(fd, NetUtil.preferIPv4Stack());
try {
if (null != source) {
NETIMPL.bind(fd, 0, source);
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/MulticastSocket.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/MulticastSocket.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/MulticastSocket.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/MulticastSocket.java Wed Dec 3 09:03:59 2008
@@ -20,7 +20,7 @@
import java.io.IOException;
import java.util.Enumeration;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainDatagramSocketImpl;
import org.apache.harmony.luni.util.Msg;
/**
@@ -551,7 +551,7 @@
synchronized void createSocket(int aPort, InetAddress addr)
throws SocketException {
impl = factory != null ? factory.createDatagramSocketImpl()
- : SocketImplProvider.getDatagramSocketImpl();
+ : new PlainDatagramSocketImpl();
impl.create();
try {
impl.setOption(SocketOptions.SO_REUSEADDR, Boolean.TRUE);
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/ServerSocket.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/ServerSocket.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/ServerSocket.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/ServerSocket.java Wed Dec 3 09:03:59 2008
@@ -20,9 +20,8 @@
import java.io.IOException;
import java.nio.channels.ServerSocketChannel;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import org.apache.harmony.luni.platform.Platform;
-
import org.apache.harmony.luni.util.Msg;
/**
@@ -57,7 +56,7 @@
*/
public ServerSocket() throws IOException {
impl = factory != null ? factory.createSocketImpl()
- : SocketImplProvider.getServerSocketImpl();
+ : new PlainSocketImpl();
}
protected ServerSocket(SocketImpl impl) {
@@ -110,7 +109,7 @@
super();
checkListen(aport);
impl = factory != null ? factory.createSocketImpl()
- : SocketImplProvider.getServerSocketImpl();
+ : new PlainSocketImpl();
InetAddress addr = localAddr == null ? InetAddress.ANY : localAddr;
synchronized (this) {
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Socket.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Socket.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Socket.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Socket.java Wed Dec 3 09:03:59 2008
@@ -24,7 +24,7 @@
import java.security.AccessController;
import org.apache.harmony.luni.net.NetUtil;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import org.apache.harmony.luni.platform.Platform;
import org.apache.harmony.luni.util.Msg;
import org.apache.harmony.luni.util.PriviAction;
@@ -78,7 +78,7 @@
*/
public Socket() {
impl = factory != null ? factory.createSocketImpl()
- : SocketImplProvider.getSocketImpl();
+ : new PlainSocketImpl();
}
/**
@@ -114,7 +114,7 @@
checkConnectPermission(host, port);
}
impl = factory != null ? factory.createSocketImpl()
- : SocketImplProvider.getSocketImpl(proxy);
+ : new PlainSocketImpl(proxy);
this.proxy = proxy;
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainDatagramSocketImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainDatagramSocketImpl.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainDatagramSocketImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainDatagramSocketImpl.java Wed Dec 3 09:03:59 2008
@@ -42,7 +42,7 @@
* support security checks. Alternative types of DatagramSocketImpl's may be
* used by setting the <code>impl.prefix</code> system property.
*/
-class PlainDatagramSocketImpl extends DatagramSocketImpl {
+public class PlainDatagramSocketImpl extends DatagramSocketImpl {
static final int MULTICAST_IF = 1;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/net/PlainSocketImpl.java Wed Dec 3 09:03:59 2008
@@ -43,7 +43,7 @@
/**
* A concrete connected-socket implementation.
*/
-class PlainSocketImpl extends SocketImpl {
+public class PlainSocketImpl extends SocketImpl {
// Const copy from socket
@@ -89,6 +89,27 @@
fd = new FileDescriptor();
}
+ public PlainSocketImpl(FileDescriptor fd) {
+ super();
+ this.fd = fd;
+ }
+
+ /**
+ * creates an instance with specified proxy.
+ */
+ public PlainSocketImpl(Proxy proxy) {
+ this();
+ this.proxy = proxy;
+ }
+
+ public PlainSocketImpl(FileDescriptor fd, int localport, InetAddress addr, int port) {
+ super();
+ this.fd = fd;
+ this.localport = localport;
+ this.address = addr;
+ this.port = port;
+ }
+
@Override
protected void accept(SocketImpl newImpl) throws IOException {
if (NetUtil.usingSocks(proxy)) {
@@ -207,9 +228,8 @@
*/
private void connect(InetAddress anAddr, int aPort, int timeout)
throws IOException {
- InetAddress normalAddr = anAddr.isAnyLocalAddress() ? InetAddress
- .getLocalHost() : anAddr;
-
+
+ InetAddress normalAddr = anAddr.isAnyLocalAddress() ? InetAddress.getLocalHost() : anAddr;
try {
if (streaming) {
if (NetUtil.usingSocks(proxy)) {
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java Wed Dec 3 09:03:59 2008
@@ -53,9 +53,6 @@
public boolean bind2(FileDescriptor aFD, int port, boolean bindToDevice,
InetAddress inetAddress) throws SocketException;
- public void createSocket(FileDescriptor fd, boolean preferIPv4Stack)
- throws IOException;
-
public int read(FileDescriptor aFD, byte[] data, int offset, int count,
int timeout) throws IOException;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java Wed Dec 3 09:03:59 2008
@@ -101,12 +101,6 @@
public native void createDatagramSocket(FileDescriptor fd,
boolean preferIPv4Stack) throws SocketException;
- /**
- * @deprecated use {@link #createStreamSocket(FileDescriptor, boolean)}
- */
- public native void createSocket(FileDescriptor fd, boolean preferIPv4Stack)
- throws IOException;
-
public native void createStreamSocket(FileDescriptor fd,
boolean preferIPv4Stack) throws SocketException;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/DatagramSocketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/DatagramSocketTest.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/DatagramSocketTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/DatagramSocketTest.java Wed Dec 3 09:03:59 2008
@@ -28,7 +28,6 @@
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
-import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.PortUnreachableException;
import java.net.SocketAddress;
@@ -36,7 +35,7 @@
import java.net.UnknownHostException;
import java.util.Date;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainDatagramSocketImpl;
import tests.support.Support_Configuration;
import tests.support.Support_PortManager;
@@ -964,7 +963,7 @@
DatagramSocketImplFactory {
public DatagramSocketImpl createDatagramSocketImpl() {
- return SocketImplProvider.getDatagramSocketImpl();
+ return new PlainDatagramSocketImpl();
}
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/ServerSocketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/ServerSocketTest.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/ServerSocketTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/ServerSocketTest.java Wed Dec 3 09:03:59 2008
@@ -35,7 +35,7 @@
import java.util.Date;
import java.util.Properties;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import tests.support.Support_Configuration;
import tests.support.Support_Exec;
@@ -333,7 +333,7 @@
private static class MockSocketImplFactory implements SocketImplFactory {
public SocketImpl createSocketImpl() {
- return SocketImplProvider.getServerSocketImpl();
+ return new PlainSocketImpl();
}
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java Wed Dec 3 09:03:59 2008
@@ -36,7 +36,7 @@
import java.net.UnknownHostException;
import java.security.Permission;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import tests.support.Support_Configuration;
@@ -2093,7 +2093,7 @@
private class MockSocketImplFactory implements SocketImplFactory {
public SocketImpl createSocketImpl() {
- return SocketImplProvider.getServerSocketImpl();
+ return new PlainSocketImpl();
}
}
}
Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/DatagramChannelImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/DatagramChannelImpl.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/DatagramChannelImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/DatagramChannelImpl.java Wed Dec 3 09:03:59 2008
@@ -37,7 +37,7 @@
import java.nio.channels.spi.SelectorProvider;
import org.apache.harmony.luni.net.NetUtil;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainDatagramSocketImpl;
import org.apache.harmony.luni.platform.FileDescriptorHandler;
import org.apache.harmony.luni.platform.INetworkSystem;
import org.apache.harmony.luni.platform.Platform;
@@ -117,8 +117,8 @@
@Override
synchronized public DatagramSocket socket() {
if (null == socket) {
- socket = new DatagramSocketAdapter(SocketImplProvider
- .getDatagramSocketImpl(fd, localPort), this);
+ socket = new DatagramSocketAdapter(
+ new PlainDatagramSocketImpl(fd, localPort), this);
}
return socket;
}
Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java Wed Dec 3 09:03:59 2008
@@ -32,7 +32,7 @@
import java.nio.channels.spi.SelectorProvider;
import org.apache.harmony.luni.net.NetUtil;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import org.apache.harmony.luni.platform.FileDescriptorHandler;
import org.apache.harmony.luni.platform.Platform;
@@ -42,10 +42,6 @@
public class ServerSocketChannelImpl extends ServerSocketChannel implements
FileDescriptorHandler {
- // ----------------------------------------------------
- // Class variables
- // ----------------------------------------------------
-
// status un-init, not initialized.
private static final int SERVER_STATUS_UNINIT = -1;
@@ -55,10 +51,6 @@
// status closed.
private static final int SERVER_STATUS_CLOSED = 1;
- // -------------------------------------------------------------------
- // Instance variables
- // -------------------------------------------------------------------
-
// The fd to interact with native code
private final FileDescriptor fd;
@@ -76,10 +68,6 @@
private static class AcceptLock {}
private final Object acceptLock = new AcceptLock();
- // ----------------------------------------------------
- // Constructor
- // ----------------------------------------------------
-
/*
* Constructor
*/
@@ -89,7 +77,7 @@
fd = new FileDescriptor();
Platform.getNetworkSystem().createStreamSocket(fd,
NetUtil.preferIPv4Stack());
- impl = SocketImplProvider.getServerSocketImpl(fd);
+ impl = new PlainSocketImpl(fd);
socket = new ServerSocketAdapter(impl, this);
}
@@ -99,15 +87,11 @@
super(SelectorProvider.provider());
status = SERVER_STATUS_OPEN;
fd = new FileDescriptor();
- impl = SocketImplProvider.getServerSocketImpl(fd);
+ impl = new PlainSocketImpl(fd);
socket = new ServerSocketAdapter(impl, this);
isBound = false;
}
- // ----------------------------------------------------
- // Methods
- // ----------------------------------------------------
-
/*
* Getting the internal Socket If we have not the socket, we create a new
* one.
@@ -168,10 +152,6 @@
return sockChannel;
}
- // -------------------------------------------------------------------
- // Protected inherited methods
- // -------------------------------------------------------------------
-
/*
* @see java.nio.channels.spi.AbstractSelectableChannel#implConfigureBlocking
*
@@ -202,10 +182,6 @@
return fd;
}
- // ----------------------------------------------------
- // Adapter classes.
- // ----------------------------------------------------
-
/*
* The adapter class of ServerSocket.
*/
Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java?rev=722971&r1=722970&r2=722971&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java Wed Dec 3 09:03:59 2008
@@ -42,7 +42,7 @@
import java.nio.channels.UnsupportedAddressTypeException;
import java.nio.channels.spi.SelectorProvider;
-import org.apache.harmony.luni.net.SocketImplProvider;
+import org.apache.harmony.luni.net.PlainSocketImpl;
import org.apache.harmony.luni.platform.FileDescriptorHandler;
import org.apache.harmony.luni.platform.INetworkSystem;
import org.apache.harmony.luni.platform.Platform;
@@ -147,7 +147,7 @@
fd = new FileDescriptor();
status = SOCKET_STATUS_UNCONNECTED;
if (connect) {
- networkSystem.createSocket(fd, true);
+ networkSystem.createStreamSocket(fd, true);
}
}
@@ -196,8 +196,8 @@
addr = connectAddress.getAddress();
port = connectAddress.getPort();
}
- socket = new SocketAdapter(SocketImplProvider.getSocketImpl(fd,
- localPort, addr, port), this);
+ socket = new SocketAdapter(
+ new PlainSocketImpl(fd, localPort, addr, port), this);
} catch (SocketException e) {
return null;
}
@@ -242,9 +242,15 @@
// check the address
InetSocketAddress inetSocketAddress = validateAddress(socketAddress);
+ InetAddress normalAddr = inetSocketAddress.getAddress();
+
+ // When connecting, map ANY address to Localhost
+ if (normalAddr.isAnyLocalAddress()) {
+ normalAddr = InetAddress.getLocalHost();
+ }
int port = inetSocketAddress.getPort();
- String hostName = inetSocketAddress.getAddress().getHostName();
+ String hostName = normalAddr.getHostName();
// security check
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
@@ -256,23 +262,12 @@
boolean finished = false;
try {
- if (!isBound) {
- // bind
- networkSystem.bind2(fd, 0, true, InetAddress
- .getByAddress(new byte[] { 0, 0, 0, 0 }));
- isBound = true;
- }
-
if (isBlocking()) {
begin();
- result = networkSystem.connect(fd, trafficClass,
- inetSocketAddress.getAddress(), inetSocketAddress
- .getPort());
-
+ result = networkSystem.connect(fd, trafficClass, normalAddr, port);
} else {
result = networkSystem.connectWithTimeout(fd, 0, trafficClass,
- inetSocketAddress.getAddress(), inetSocketAddress
- .getPort(), HY_SOCK_STEP_START, connectContext);
+ normalAddr, port, HY_SOCK_STEP_START, connectContext);
// set back to nonblocking to work around with a bug in portlib
if (!this.isBlocking()) {
networkSystem.setNonBlocking(fd, true);
@@ -357,6 +352,8 @@
synchronized (this) {
status = (finished ? SOCKET_STATUS_CONNECTED : status);
isBound = finished;
+ // TPE: Workaround for bug that turns socket back to blocking
+ if (!isBlocking()) implConfigureBlocking(false);
}
return finished;
}