# Poco::Net

# template < class ServiceHandler >

# class SocketAcceptor

Library: Net
Package: Reactor
Header: Poco/Net/SocketAcceptor.h

## Description

This class implements the Acceptor part of the Acceptor-Connector design pattern.

The Acceptor-Connector pattern has been described in the book "Pattern Languages of Program Design 3", edited by Robert Martin, Frank Buschmann and Dirk Riehle (Addison Wesley, 1997).

The Acceptor-Connector design pattern decouples connection establishment and service initialization in a distributed system from the processing performed once a service is initialized. This decoupling is achieved with three components: Acceptors, Connectors and Service Handlers. The SocketAcceptor passively waits for connection requests (usually from a remote Connector) and establishes a connection upon arrival of a connection requests. Also, a Service Handler is initialized to process the data arriving via the connection in an application-specific way.

The SocketAcceptor sets up a ServerSocket and registers itself for a ReadableNotification, denoting an incoming connection request.

When the ServerSocket becomes readable the SocketAcceptor accepts the connection request and creates a ServiceHandler to service the connection.

The ServiceHandler class must provide a constructor that takes a StreamSocket and a SocketReactor as arguments, e.g.:

    MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor)

When the ServiceHandler is done, it must destroy itself.

Subclasses can override the createServiceHandler() factory method if special steps are necessary to create a ServiceHandler object.

## Member Summary

Member Functions: createServiceHandler, onAccept, reactor, registerAcceptor, socket, unregisterAcceptor

## Constructors

### SocketAcceptor

explicit SocketAcceptor(
ServerSocket & socket
);

Creates an SocketAcceptor, using the given ServerSocket.

### SocketAcceptor

SocketAcceptor(
ServerSocket & socket,
SocketReactor & reactor
);

Creates an SocketAcceptor, using the given ServerSocket. The SocketAcceptor registers itself with the given SocketReactor.

## Destructor

### ~SocketAcceptor

virtual ~SocketAcceptor();

Destroys the SocketAcceptor.

## Member Functions

### onAccept

void onAccept(
ReadableNotification * pNotification
);

### registerAcceptor

virtual void registerAcceptor(
SocketReactor & reactor
);

Registers the SocketAcceptor with a SocketReactor.

A subclass can override this and, for example, also register an event handler for a timeout event.

The overriding method must call the baseclass implementation first.

### unregisterAcceptor

virtual void unregisterAcceptor();

Unregisters the SocketAcceptor.

A subclass can override this and, for example, also unregister its event handler for a timeout event.

The overriding method must call the baseclass implementation first.

### createServiceHandler

virtual ServiceHandler * createServiceHandler(
StreamSocket & socket
);

Create and initialize a new ServiceHandler instance.

Subclasses can override this method.

### reactor

SocketReactor * reactor();

Returns a pointer to the SocketReactor where this SocketAcceptor is registered.

The pointer may be null.

### socket

Socket & socket();

Returns a reference to the SocketAcceptor's socket.