1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileDescriptor; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class is the base of all streaming socket implementation classes. 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Streaming sockets are wrapped by two classes, {@code ServerSocket} and 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Socket} at the server and client end of a connection. At the server, 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * there are two types of sockets engaged in communication, the {@code 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ServerSocket} on a well known port (referred to as listener) used to 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * establish a connection and the resulting {@code Socket} (referred to as 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * host). 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class SocketImpl implements SocketOptions { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The remote address this socket is connected to. 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected InetAddress address; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The remote port this socket is connected to. 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int port; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The file descriptor of this socket. 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected FileDescriptor fd; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The local port this socket is connected to. 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int localport; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Waits for an incoming request and blocks until the connection is opened 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on the given socket. 59f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newSocket 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the socket to accept connections on. 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while accepting a new connection. 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void accept(SocketImpl newSocket) throws IOException; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the available number of bytes which are readable from this socket 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * without blocking. 70f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes that may be read without blocking. 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while reading the number of bytes. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract int available() throws IOException; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Binds this socket to the specified local host address and port number. 79f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param address 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the local machine address to bind this socket to. 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port on the local machine to bind this socket to. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while binding this socket. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 878de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes protected abstract void bind(InetAddress address, int port) throws IOException; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Closes this socket. This makes later access invalid. 91f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while closing this socket. 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void close() throws IOException; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Connects this socket to the specified remote host and port number. 99f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the remote host this socket has to be connected to. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the remote port on which this socket has to be connected. 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while connecting to the remote host. 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void connect(String host, int port) throws IOException; 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Connects this socket to the specified remote host address and port 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number. 112f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param address 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the remote host address this socket has to be connected to. 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the remote port on which this socket has to be connected. 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while connecting to the remote host. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void connect(InetAddress address, int port) 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException; 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new unconnected socket. The argument {@code isStreaming} 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defines whether the new socket is a streaming or a datagram socket. 126f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param isStreaming 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defines whether the type of the new socket is streaming or 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * datagram. 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while creating the socket. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void create(boolean isStreaming) throws IOException; 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the file descriptor of this socket. 137f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the file descriptor of this socket. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected FileDescriptor getFileDescriptor() { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return fd; 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 145a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes * @hide used by java.nio 146a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes */ 147a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes public FileDescriptor getFD$() { 148a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes return fd; 149a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes } 150a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes 151a3b57e9cb41fb00ac607cd330fa73270b564b66cElliott Hughes /** 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the remote address this socket is connected to. 153f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the remote address of this socket. 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected InetAddress getInetAddress() { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return address; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the input stream of this socket. 162f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the input stream of this socket. 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while accessing the input stream. 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract InputStream getInputStream() throws IOException; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the local port number of this socket. The field is initialized to 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code -1} and upon demand will go to the IP stack to get the bound 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. See the class comment for the context of the local port. 173f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the local port number this socket is bound to. 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int getLocalPort() { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return localport; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the output stream of this socket. 182f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the output stream of this socket. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while accessing the output stream. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract OutputStream getOutputStream() throws IOException; 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the remote port number of this socket. This value is not meaningful 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when this instance is wrapped by a {@code ServerSocket}. 192f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the remote port this socket is connected to. 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int getPort() { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return port; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Listens for connection requests on this streaming socket. Incoming 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection requests are queued up to the limit specified by {@code 202e1502d64e937001636fca3d62b2552ef2a34d05fElliott Hughes * backlog}. Additional requests are rejected. This method 203e1502d64e937001636fca3d62b2552ef2a34d05fElliott Hughes * may only be invoked on stream sockets. 204f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param backlog 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of outstanding connection requests. 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while listening. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void listen(int backlog) throws IOException; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a string containing a concise, human-readable description of the 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * socket. 215f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the textual representation of this socket. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 2201c4b8eb0aebfe7f99c10fb1d01716946e8e74ad7Elliott Hughes return "Socket[address=" + getInetAddress() + 2211c4b8eb0aebfe7f99c10fb1d01716946e8e74ad7Elliott Hughes ",port=" + port + ",localPort=" + getLocalPort() + "]"; 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Closes the input channel of this socket. 2268de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes * 2278de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes * <p>This default implementation always throws an {@link IOException} to 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicate that the subclass should have overridden this method. 229f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * always because this method should be overridden. 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void shutdownInput() throws IOException { 234b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IOException("Method has not been implemented"); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Closes the output channel of this socket. 2398de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes * 2408de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes * <p>This default implementation always throws an {@link IOException} to 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicate that the subclass should have overridden this method. 242f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * always because this method should be overridden. 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void shutdownOutput() throws IOException { 247b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes throw new IOException("Method has not been implemented"); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Connects this socket to the remote host address and port number specified 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by the {@code SocketAddress} object with the given timeout. This method 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will block indefinitely if the timeout is set to zero. 254f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param remoteAddr 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the remote host address and port number to connect to. 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timeout 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the timeout value in milliseconds. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while connecting. 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2628de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes protected abstract void connect(SocketAddress remoteAddr, int timeout) throws IOException; 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether the socket supports urgent data or not. Subclasses should 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * override this method. 267f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code false} because subclasses must override this method. 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean supportsUrgentData() { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sends the single byte of urgent data on the socket. 276f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the byte of urgent data. 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs sending urgent data. 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void sendUrgentData(int value) throws IOException; 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets performance preference for connection time, latency and bandwidth. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Does nothing by default. 287f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param connectionTime 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the importance of connect time. 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param latency 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the importance of latency. 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param bandwidth 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the importance of bandwidth. 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2958de7cf6bff36093dda9e25a1ab3718720cb54906Elliott Hughes protected void setPerformancePreferences(int connectionTime, int latency, int bandwidth) { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 297933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 298933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller /** 299933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * Initialize the bind() state. 300933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * @hide used in java.nio. 301933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller */ 302933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller public void onBind(InetAddress localAddress, int localPort) { 303933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Do not add any code to these methods. They are concrete only to preserve API 304933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // compatibility. 305933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } 306933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 307933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller /** 308933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * Initialize the connect() state. 309933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * @hide used in java.nio. 310933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller */ 311933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller public void onConnect(InetAddress remoteAddress, int remotePort) { 312933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Do not add any code to these methods. They are concrete only to preserve API 313933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // compatibility. 314933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } 315933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller 316933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller /** 317933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * Initialize the close() state. 318933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller * @hide used in java.nio. 319933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller */ 320933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller public void onClose() { 321933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // Do not add any code to these methods. They are concrete only to preserve API 322933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller // compatibility. 323933fbbf606268eec9fc430632b8bca7002a833b3Neil Fuller } 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 325