Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Protected Ctors](https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#proctors) \| [Methods](https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#inhmethods)

# ServerSocketChannel

` public abstract class ServerSocketChannel `   
` ` ` ` ` ` ` extends https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel ` ` implements https://developer.android.com/reference/java/nio/channels/NetworkChannel `

|---|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||||
| ↳ | [java.nio.channels.spi.AbstractInterruptibleChannel](https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel) ||||
|   | ↳ | [java.nio.channels.SelectableChannel](https://developer.android.com/reference/java/nio/channels/SelectableChannel) |||
|   |   | ↳ | [java.nio.channels.spi.AbstractSelectableChannel](https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel) ||
|   |   |   | ↳ | java.nio.channels.ServerSocketChannel |

<br />

*** ** * ** ***

A selectable channel for stream-oriented listening sockets.

A server-socket channel is created by invoking the `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#open()` method of this class. It is not possible to create a channel for an arbitrary, pre-existing `https://developer.android.com/reference/java/net/ServerSocket`. A newly-created server-socket channel is open but not yet bound. An attempt to invoke the `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#accept()` method of an unbound server-socket channel will cause a `https://developer.android.com/reference/java/nio/channels/NotYetBoundException` to be thrown. A server-socket channel can be bound by invoking one of the `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#bind(java.net.SocketAddress,%20int)` methods defined by this class.

Socket options are configured using the `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#setOption(java.net.SocketOption<T>,%20T)` method. Server-socket channels support the following options:
>
> | Option Name | Description |
> | `https://developer.android.com/reference/java/net/StandardSocketOptions#SO_RCVBUF` | The size of the socket receive buffer |
> | `https://developer.android.com/reference/java/net/StandardSocketOptions#SO_REUSEADDR` | Re-use address |
> |---|---|
> [Socket options]

Additional (implementation specific) options may also be supported.

Server-socket channels are safe for use by multiple concurrent threads.

<br />

## Summary

| ### Protected constructors ||
|---|---|
| ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#ServerSocketChannel(java.nio.channels.spi.SelectorProvider)(https://developer.android.com/reference/java/nio/channels/spi/SelectorProvider provider) ` Initializes a new instance of this class. |

| ### Public methods ||
|---|---|
| ` abstract https://developer.android.com/reference/java/nio/channels/SocketChannel` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#accept()() ` Accepts a connection made to this channel's socket. |
| ` abstract https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#bind(java.net.SocketAddress,%20int)(https://developer.android.com/reference/java/net/SocketAddress local, int backlog) ` Binds the channel's socket to a local address and configures the socket to listen for connections. |
| ` final https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#bind(java.net.SocketAddress)(https://developer.android.com/reference/java/net/SocketAddress local) ` Binds the channel's socket to a local address and configures the socket to listen for connections. |
| ` abstract https://developer.android.com/reference/java/net/SocketAddress` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#getLocalAddress()() ` Returns the socket address that this channel's socket is bound to. If there is a security manager set, its `checkConnect` method is called with the local address and `-1` as its arguments to see if the operation is allowed. |
| ` static https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#open()() ` Opens a server-socket channel. |
| ` abstract <T> https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#setOption(java.net.SocketOption<T>,%20T)(https://developer.android.com/reference/java/net/SocketOption<T> name, T value) ` Sets the value of a socket option. |
| ` abstract https://developer.android.com/reference/java/net/ServerSocket` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#socket()() ` Retrieves a server socket associated with this channel. |
| ` final int` | ` https://developer.android.com/reference/java/nio/channels/ServerSocketChannel#validOps()() ` Returns an operation set identifying this channel's supported operations. |

### Inherited methods

From class ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel ` ` final https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#blockingLock()() `

Retrieves the object upon which the `https://developer.android.com/reference/java/nio/channels/SelectableChannel#configureBlocking(boolean)` and `https://developer.android.com/reference/java/nio/channels/SelectableChannel#register(java.nio.channels.Selector,%20int)` methods synchronize.
` final https://developer.android.com/reference/java/nio/channels/SelectableChannel` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#configureBlocking(boolean)(boolean block) `

Adjusts this channel's blocking mode.
` final void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#implCloseChannel()() `

Closes this channel.
` abstract void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#implCloseSelectableChannel()() `

Closes this selectable channel.
` abstract void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#implConfigureBlocking(boolean)(boolean block) `

Adjusts this channel's blocking mode.
` final boolean` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#isBlocking()() `

Tells whether or not every I/O operation on this channel will block until it completes.
` final boolean` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#isRegistered()() `

Tells whether or not this channel is currently registered with any selectors.
` final https://developer.android.com/reference/java/nio/channels/SelectionKey` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#keyFor(java.nio.channels.Selector)(https://developer.android.com/reference/java/nio/channels/Selector sel) `

Retrieves the key representing the channel's registration with the given selector.
` final https://developer.android.com/reference/java/nio/channels/spi/SelectorProvider` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#provider()() `

Returns the provider that created this channel.
` final https://developer.android.com/reference/java/nio/channels/SelectionKey` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel#register(java.nio.channels.Selector,%20int,%20java.lang.Object)(https://developer.android.com/reference/java/nio/channels/Selector sel, int ops, https://developer.android.com/reference/java/lang/Object att) `

Registers this channel with the given selector, returning a selection key.
From class ` https://developer.android.com/reference/java/nio/channels/SelectableChannel ` ` abstract https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#blockingLock()() `

Retrieves the object upon which the `https://developer.android.com/reference/java/nio/channels/SelectableChannel#configureBlocking(boolean)` and `https://developer.android.com/reference/java/nio/channels/SelectableChannel#register(java.nio.channels.Selector,%20int)` methods synchronize.
` abstract https://developer.android.com/reference/java/nio/channels/SelectableChannel` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#configureBlocking(boolean)(boolean block) `

Adjusts this channel's blocking mode.
` abstract boolean` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#isBlocking()() `

Tells whether or not every I/O operation on this channel will block until it completes.
` abstract boolean` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#isRegistered()() `

Tells whether or not this channel is currently registered with any selectors.
` abstract https://developer.android.com/reference/java/nio/channels/SelectionKey` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#keyFor(java.nio.channels.Selector)(https://developer.android.com/reference/java/nio/channels/Selector sel) `

Retrieves the key representing the channel's registration with the given selector.
` abstract https://developer.android.com/reference/java/nio/channels/spi/SelectorProvider` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#provider()() `

Returns the provider that created this channel.
` abstract https://developer.android.com/reference/java/nio/channels/SelectionKey` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#register(java.nio.channels.Selector,%20int,%20java.lang.Object)(https://developer.android.com/reference/java/nio/channels/Selector sel, int ops, https://developer.android.com/reference/java/lang/Object att) `

Registers this channel with the given selector, returning a selection key.
` final https://developer.android.com/reference/java/nio/channels/SelectionKey` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#register(java.nio.channels.Selector,%20int)(https://developer.android.com/reference/java/nio/channels/Selector sel, int ops) `

Registers this channel with the given selector, returning a selection key.
` abstract int` ` https://developer.android.com/reference/java/nio/channels/SelectableChannel#validOps()() `

Returns an [operation set](https://developer.android.com/reference/java/nio/channels/SelectionKey#opsets) identifying this channel's supported operations.
From class ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel ` ` final void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel#begin()() `

Marks the beginning of an I/O operation that might block indefinitely.
` final void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel#close()() `

Closes this channel.
` final void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel#end(boolean)(boolean completed) `

Marks the end of an I/O operation that might block indefinitely.
` abstract void` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel#implCloseChannel()() `

Closes this channel.
` final boolean` ` https://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel#isOpen()() `

Tells whether or not this channel is open.
From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.
From interface ` https://developer.android.com/reference/java/nio/channels/Channel ` ` abstract void` ` https://developer.android.com/reference/java/nio/channels/Channel#close()() `

Closes this channel.
` abstract boolean` ` https://developer.android.com/reference/java/nio/channels/Channel#isOpen()() `

Tells whether or not this channel is open.
From interface ` https://developer.android.com/reference/java/nio/channels/InterruptibleChannel ` ` abstract void` ` https://developer.android.com/reference/java/nio/channels/InterruptibleChannel#close()() `

Closes this channel.
From interface ` https://developer.android.com/reference/java/nio/channels/NetworkChannel ` ` abstract https://developer.android.com/reference/java/nio/channels/NetworkChannel` ` https://developer.android.com/reference/java/nio/channels/NetworkChannel#bind(java.net.SocketAddress)(https://developer.android.com/reference/java/net/SocketAddress local) `

Binds the channel's socket to a local address.
` abstract https://developer.android.com/reference/java/net/SocketAddress` ` https://developer.android.com/reference/java/nio/channels/NetworkChannel#getLocalAddress()() `

Returns the socket address that this channel's socket is bound to.
` abstract <T> T` ` https://developer.android.com/reference/java/nio/channels/NetworkChannel#getOption(java.net.SocketOption<T>)(https://developer.android.com/reference/java/net/SocketOption<T> name) `

Returns the value of a socket option.
` abstract <T> https://developer.android.com/reference/java/nio/channels/NetworkChannel` ` https://developer.android.com/reference/java/nio/channels/NetworkChannel#setOption(java.net.SocketOption<T>,%20T)(https://developer.android.com/reference/java/net/SocketOption<T> name, T value) `

Sets the value of a socket option.
` abstract https://developer.android.com/reference/java/util/Set<https://developer.android.com/reference/java/net/SocketOption<?>>` ` https://developer.android.com/reference/java/nio/channels/NetworkChannel#supportedOptions()() `

Returns a set of the socket options supported by this channel.
From interface ` https://developer.android.com/reference/java/io/Closeable ` ` abstract void` ` https://developer.android.com/reference/java/io/Closeable#close()() `

Closes this stream and releases any system resources associated with it.
From interface ` https://developer.android.com/reference/java/lang/AutoCloseable ` ` abstract void` ` https://developer.android.com/reference/java/lang/AutoCloseable#close()() `

Closes this resource, relinquishing any underlying resources.

## Protected constructors

### ServerSocketChannel

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected ServerSocketChannel (SelectorProvider provider)
```

Initializes a new instance of this class.

<br />

| Parameters ||
|---|---|
| `provider` | `SelectorProvider`: The provider that created this channel <br /> |

## Public methods

### accept

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract SocketChannel accept ()
```

Accepts a connection made to this channel's socket.

If this channel is in non-blocking mode then this method will immediately return `null` if there are no pending connections. Otherwise it will block indefinitely until a new connection is available or an I/O error occurs.

The socket channel returned by this method, if any, will be in blocking mode regardless of the blocking mode of this channel.

This method performs exactly the same security checks as the `https://developer.android.com/reference/java/net/ServerSocket#accept()` method of the `https://developer.android.com/reference/java/net/ServerSocket` class. That is, if a security manager has been installed then for each new connection this method verifies that the address and port number of the connection's remote endpoint are permitted by the security manager's `https://developer.android.com/reference/java/lang/SecurityManager#checkAccept(java.lang.String,%20int)` method.

<br />

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/channels/SocketChannel` | The socket channel for the new connection, or `null` if this channel is in non-blocking mode and no connection is available to be accepted <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If some other I/O error occurs |
| `https://developer.android.com/reference/java/lang/SecurityException` | If a security manager has been installed and it does not permit access to the remote endpoint of the new connection |
| `https://developer.android.com/reference/java/nio/channels/AsynchronousCloseException` | If another thread closes this channel while the accept operation is in progress |
| `https://developer.android.com/reference/java/nio/channels/ClosedByInterruptException` | If another thread interrupts the current thread while the accept operation is in progress, thereby closing the channel and setting the current thread's interrupt status |
| `https://developer.android.com/reference/java/nio/channels/ClosedChannelException` | If this channel is closed |
| `https://developer.android.com/reference/java/nio/channels/NotYetBoundException` | If this channel's socket has not yet been bound |

### bind

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract ServerSocketChannel bind (SocketAddress local, 
                int backlog)
```

Binds the channel's socket to a local address and configures the socket to listen for connections.

This method is used to establish an association between the socket and a local address. Once an association is established then the socket remains bound until the channel is closed.

The `backlog` parameter is the maximum number of pending connections on the socket. Its exact semantics are implementation specific. In particular, an implementation may impose a maximum length or may choose to ignore the parameter altogther. If the `backlog` parameter has the value `0`, or a negative value, then an implementation specific default is used.

<br />

| Parameters ||
|---|---|
| `local` | `SocketAddress`: The address to bind the socket, or `null` to bind to an automatically assigned socket address <br /> |
| `backlog` | `int`: The maximum number of pending connections <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | This channel <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If some other I/O error occurs |
| `https://developer.android.com/reference/java/lang/SecurityException` | If a security manager has been installed and its `https://developer.android.com/reference/java/lang/SecurityManager#checkListen(int)` method denies the operation |
| `https://developer.android.com/reference/java/nio/channels/AlreadyBoundException` | If the socket is already bound |
| `https://developer.android.com/reference/java/nio/channels/ClosedChannelException` | If this channel is closed |
| `https://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException` | If the type of the given address is not supported |

### bind

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final ServerSocketChannel bind (SocketAddress local)
```

Binds the channel's socket to a local address and configures the socket to listen for connections.

An invocation of this method is equivalent to the following:
>
> ```
> bind(local, 0);
> ```

<br />

<br />

| Parameters ||
|---|---|
| `local` | `SocketAddress`: The local address to bind the socket, or `null` to bind to an automatically assigned socket address <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | This channel <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |
| `https://developer.android.com/reference/java/lang/SecurityException` | If a security manager has been installed and its `https://developer.android.com/reference/java/lang/SecurityManager#checkListen(int)` method denies the operation |
| `https://developer.android.com/reference/java/nio/channels/AlreadyBoundException` |   |
| `https://developer.android.com/reference/java/nio/channels/ClosedChannelException` |   |
| `https://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException` |   |

### getLocalAddress

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract SocketAddress getLocalAddress ()
```

Returns the socket address that this channel's socket is bound to.

Where the channel is `https://developer.android.com/reference/java/nio/channels/NetworkChannel#bind(java.net.SocketAddress)` to an Internet Protocol socket address then the return value from this method is of type `https://developer.android.com/reference/java/net/InetSocketAddress`.

If there is a security manager set, its `checkConnect` method is called with the local address and `-1` as its arguments to see if the operation is allowed. If the operation is not allowed, a `SocketAddress` representing the `https://developer.android.com/reference/java/net/InetAddress#getLoopbackAddress()` address and the local port of the channel's socket is returned.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/net/SocketAddress` | The `SocketAddress` that the socket is bound to, or the `SocketAddress` representing the loopback address if denied by the security manager, or `null` if the channel's socket is not bound <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |
| `https://developer.android.com/reference/java/nio/channels/ClosedChannelException` |   |

### open

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static ServerSocketChannel open ()
```

Opens a server-socket channel.

The new channel is created by invoking the `https://developer.android.com/reference/java/nio/channels/spi/SelectorProvider#openServerSocketChannel()` method of the system-wide default `https://developer.android.com/reference/java/nio/channels/spi/SelectorProvider` object.

The new channel's socket is initially unbound; it must be bound to a specific address via one of its socket's `https://developer.android.com/reference/java/net/ServerSocket#bind(java.net.SocketAddress)` methods before connections can be accepted.

<br />

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | A new socket channel <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | If an I/O error occurs |

### setOption

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract ServerSocketChannel setOption (SocketOption<T> name, 
                T value)
```

Sets the value of a socket option.

<br />

| Parameters ||
|---|---|
| `name` | `SocketOption`: The socket option <br /> |
| `value` | `T`: The value of the socket option. A value of `null` may be a valid value for some socket options. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/channels/ServerSocketChannel` | This channel <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` |   |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |
| `https://developer.android.com/reference/java/nio/channels/ClosedChannelException` |   |

### socket

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract ServerSocket socket ()
```

Retrieves a server socket associated with this channel.

The returned object will not declare any public methods that are not declared in the `https://developer.android.com/reference/java/net/ServerSocket` class.

<br />

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/net/ServerSocket` | A server socket associated with this channel <br /> |

### validOps

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public final int validOps ()
```

Returns an operation set identifying this channel's supported operations.

Server-socket channels only support the accepting of new connections, so this method returns `https://developer.android.com/reference/java/nio/channels/SelectionKey#OP_ACCEPT`.

<br />

<br />

| Returns ||
|---|---|
| `int` | The valid-operation set <br /> |