ch.qos.logback.core.net.server

## Interface ServerListener<T extends Client>

All Superinterfaces:
  AutoCloseable, Closeable

All Known Implementing Classes:
  ServerSocketListener

    public interface ServerListener<T extends Client>
    extends Closeable

A listener that accepts `Client` connections on behalf of a `ServerRunner`.

This interface exists primarily to abstract away the details of the listener's underlying `ServerSocket` and the concurrency associated with handling multiple clients. Such realities make it difficult to create effective unit tests for the `ServerRunner` that are easy to understand and maintain.

This interface captures the only those details about the listener that the `ServerRunner` cares about; namely, that it is something that has an underlying resource (or resources) that need to be closed before the listener is discarded.

### Method Summary

All Methods Instance Methods Abstract Methods
`T` `acceptClient()` Accepts the next client that appears on this listener.
`void` `close()` Closes any underlying `Closeable` resources associated with this listener.

### Method Detail

#### acceptClient

    T acceptClient()
            throws IOException,
                   InterruptedException

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.

Returns:
  client object
Throws:
  `IOException`
  `InterruptedException`

#### close

    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`