diff options
| -rw-r--r-- | core/java/android/net/LocalServerSocket.java | 4 | ||||
| -rw-r--r-- | core/java/android/net/LocalSocket.java | 17 | ||||
| -rw-r--r-- | core/java/android/net/LocalSocketImpl.java | 46 |
3 files changed, 37 insertions, 30 deletions
diff --git a/core/java/android/net/LocalServerSocket.java b/core/java/android/net/LocalServerSocket.java index 9464222f091d..e1eaf00d0f20 100644 --- a/core/java/android/net/LocalServerSocket.java +++ b/core/java/android/net/LocalServerSocket.java @@ -87,9 +87,9 @@ public class LocalServerSocket { { LocalSocketImpl acceptedImpl = new LocalSocketImpl(); - impl.accept (acceptedImpl); + impl.accept(acceptedImpl); - return new LocalSocket(acceptedImpl, LocalSocket.SOCKET_UNKNOWN); + return LocalSocket.createLocalSocketForAccept(acceptedImpl, LocalSocket.SOCKET_UNKNOWN); } /** diff --git a/core/java/android/net/LocalSocket.java b/core/java/android/net/LocalSocket.java index e14facb1abb5..3f8d9d3b6723 100644 --- a/core/java/android/net/LocalSocket.java +++ b/core/java/android/net/LocalSocket.java @@ -75,17 +75,24 @@ public class LocalSocket implements Closeable { isConnected = true; } - /** - * for use with AndroidServerSocket - * @param impl a SocketImpl - */ - /*package*/ LocalSocket(LocalSocketImpl impl, int sockType) { + private LocalSocket(LocalSocketImpl impl, int sockType) { this.impl = impl; this.sockType = sockType; this.isConnected = false; this.isBound = false; } + /** + * for use with LocalServerSocket.accept() + */ + static LocalSocket createLocalSocketForAccept(LocalSocketImpl impl, int sockType) { + LocalSocket socket = new LocalSocket(impl, sockType); + socket.isConnected = true; + socket.isBound = true; + socket.implCreated = true; + return socket; + } + /** {@inheritDoc} */ @Override public String toString() { diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java index 0f0e9c49a0b0..d8f782115cf8 100644 --- a/core/java/android/net/LocalSocketImpl.java +++ b/core/java/android/net/LocalSocketImpl.java @@ -235,29 +235,29 @@ class LocalSocketImpl * @throws IOException */ public void create(int sockType) throws IOException { - // no error if socket already created - // need this for LocalServerSocket.accept() - if (fd == null) { - int osType; - switch (sockType) { - case LocalSocket.SOCKET_DGRAM: - osType = OsConstants.SOCK_DGRAM; - break; - case LocalSocket.SOCKET_STREAM: - osType = OsConstants.SOCK_STREAM; - break; - case LocalSocket.SOCKET_SEQPACKET: - osType = OsConstants.SOCK_SEQPACKET; - break; - default: - throw new IllegalStateException("unknown sockType"); - } - try { - fd = Os.socket(OsConstants.AF_UNIX, osType, 0); - mFdCreatedInternally = true; - } catch (ErrnoException e) { - e.rethrowAsIOException(); - } + if (fd != null) { + throw new IOException("LocalSocketImpl already has an fd"); + } + + int osType; + switch (sockType) { + case LocalSocket.SOCKET_DGRAM: + osType = OsConstants.SOCK_DGRAM; + break; + case LocalSocket.SOCKET_STREAM: + osType = OsConstants.SOCK_STREAM; + break; + case LocalSocket.SOCKET_SEQPACKET: + osType = OsConstants.SOCK_SEQPACKET; + break; + default: + throw new IllegalStateException("unknown sockType"); + } + try { + fd = Os.socket(OsConstants.AF_UNIX, osType, 0); + mFdCreatedInternally = true; + } catch (ErrnoException e) { + e.rethrowAsIOException(); } } |