Package ch.qos.logback.core.net.server

# Class ServerSocketListener<T extends Client>

java.lang.Object
ch.qos.logback.core.net.server.ServerSocketListener<T>

All Implemented Interfaces:
  `ServerListener<T>`, `Closeable`, `AutoCloseable`

public abstract class ServerSocketListener<T extends Client> extends Object implements ServerListener<T>
A `ServerListener` that accepts connections on a `ServerSocket`.

Author:
  Carl Harris

## Constructor Summary

Constructors
Constructor
Description
`ServerSocketListener(ServerSocket serverSocket)`
Constructs a new listener.

## Method Summary

Modifier and Type
Method
Description
`T`
`acceptClient()`
Accepts the next client that appears on this listener.
`void`
`close()`
Closes any underlying `Closeable` resources associated with this listener.
`protected abstract T`
`createClient(String id, Socket socket)`
Creates the client object for a new socket connection
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Constructor Details

### ServerSocketListener

public ServerSocketListener(ServerSocket serverSocket)
Constructs a new listener.

Parameters:
  `serverSocket` - server socket delegate

## Method Details

### acceptClient

public T acceptClient() throws IOException
Accepts the next client that appears on this listener.

An implementation of this method is expected to block the calling thread and not return until either a client appears or an exception occurs.

Specified by:
  `acceptClient` in interface `ServerListener<T extends Client>`
Returns:
  client object
Throws:
  `IOException`

### createClient

protected abstract T createClient(String id, Socket socket) throws IOException
Creates the client object for a new socket connection

Parameters:
  `id` - identifier string for the client
  `socket` - client's socket connection
Returns:
  client object
Throws:
  `IOException`

### close

public void close()
Closes any underlying `Closeable` resources associated with this listener.

Note that (as described in Doug Lea's discussion about interrupting I/O operations in "Concurrent Programming in Java" (Addison-Wesley Professional, 2nd edition, 1999) this method is used to interrupt any blocked I/O operation in the client when the server is shutting down. The client implementation must anticipate this potential, and gracefully exit when the blocked I/O operation throws the relevant `IOException` subclass.

Note also, that unlike `Closeable.close()` this method is not permitted to propagate any `IOException` that occurs when closing the underlying resource(s).

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `ServerListener<T extends Client>`

### toString

public String toString()

Overrides:
  `toString` in class `Object`