libassa 3.5.0
|
#include <Acceptor.h>
Public Member Functions | |
Acceptor (Reactor *r_) | |
Default constructor. | |
virtual | ~Acceptor () |
Do-nothing destructor. | |
virtual int | open (const Address &local_addr_) |
Initialize listener endpoint and Acceptor with Reactor. | |
virtual int | close (void) |
Close PEER_ACCEPTOR stream. | |
int | handle_read (int fd) |
Callback invoked by Reactor when new connection requests is detected. | |
virtual int | handle_close (int fd) |
Callback invoked by Reactor if PEER_ACCEPTOR stream went bad, or Reactor has been commanded to stop event processing. | |
Protected Member Functions | |
virtual SERVICE_HANDLER * | makeServiceHandler (PEER_ACCEPTOR *sock_) |
Defines creation strategy for ServiceHandler. | |
virtual int | acceptServiceHandler (PEER_ACCEPTOR *&new_socket_) |
Default strategy is to accept new connection. | |
virtual int | activateServiceHandler (PEER_ACCEPTOR *new_socket_) |
Defines the concurrency strategy. | |
Protected Attributes | |
PEER_ACCEPTOR | m_listenSocket |
Underlying communication stream. | |
Private Attributes | |
Reactor * | m_reactor |
Reactor to use. |
Definition at line 43 of file Acceptor.h.
ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::Acceptor | ( | Reactor * | r_ | ) | [inline] |
ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::~Acceptor | ( | ) | [inline, virtual] |
Do-nothing destructor.
Underlying PEER_ACCEPTOR stream will be closed during its own destruction sequence.
Definition at line 153 of file Acceptor.h.
References trace.
{ trace("Acceptor::~Acceptor"); }
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::acceptServiceHandler | ( | PEER_ACCEPTOR *& | new_socket_ | ) | [inline, protected, virtual] |
Default strategy is to accept new connection.
Derived class can change this strategy by overloading this method.
new_socket_ | On return will have a pointer to newly created PEER_STREAM, or =0 if failed |
Definition at line 198 of file Acceptor.h.
References trace.
{ trace("Acceptor::acceptServiceHandler"); new_socket_ = m_listenSocket.accept (); return new_socket_ ? 0 : -1; }
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::activateServiceHandler | ( | PEER_ACCEPTOR * | new_socket_ | ) | [protected, virtual] |
Defines the concurrency strategy.
Default is to create SERVICE_HANDLERin current process(thread), call its open() methid and let Reactor handle its I/O events. Derived class changes this strategy by overloading this class.
new_socket_ | [in] PEER_STREAM pointer to activate |
Definition at line 208 of file Acceptor.h.
{ trace("Acceptor::activateServiceHandler"); if (!new_socket_) { return -1; } SH* sh = makeServiceHandler (new_socket_); if (sh->open () < 0) { sh->close (); } return 0; }
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::close | ( | void | ) | [inline, virtual] |
Close PEER_ACCEPTOR stream.
Definition at line 161 of file Acceptor.h.
References trace.
{ trace("Acceptor::close"); m_listenSocket.close (); return 0; }
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::handle_close | ( | int | fd | ) | [inline, virtual] |
Callback invoked by Reactor if PEER_ACCEPTOR stream went bad, or Reactor has been commanded to stop event processing.
This method should always return -1, if stream cannot be repared. Derived class can change this strategy by overloading this method. If called object is other then Reactor, an explicit call to Reactor::removeHandler (this->id()) is required. By default behavior, Acceptor will destroy itself.
Reimplemented from ASSA::EventHandler.
Definition at line 171 of file Acceptor.h.
References DL, ASSA::REACT, and trace.
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::handle_read | ( | int | fd | ) | [virtual] |
Callback invoked by Reactor when new connection requests is detected.
Default strategy is to accept ALL awaiting incoming connections at once. Derived class can change this strategy by overloading this method.
Reimplemented from ASSA::EventHandler.
Definition at line 252 of file Acceptor.h.
References PA, ASSA::FdSet::reset(), ASSA::FdSet::setFd(), and trace.
{ trace("Acceptor<>::handle_read"); FdSet mask; timeval poll = {0, 0}; PA* new_socket = 0; int fd = m_listenSocket.getHandler (); if (fd != fd_) { return -1; } do { if ( acceptServiceHandler (new_socket) == -1 ) { return -1; } if ( !activateServiceHandler (new_socket) == -1 ) { return -1; } mask.reset (); mask.setFd (fd); } while ((::select (fd+1, &mask, NULL, NULL, &poll) == 1)); return 0; }
SERVICE_HANDLER * ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::makeServiceHandler | ( | PEER_ACCEPTOR * | sock_ | ) | [inline, protected, virtual] |
Defines creation strategy for ServiceHandler.
Definition at line 188 of file Acceptor.h.
References trace.
{ trace("Acceptor<>::makeServiceHandler"); return new SERVICE_HANDLER (sock_); }
int ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::open | ( | const Address & | local_addr_ | ) | [virtual] |
Initialize listener endpoint and Acceptor with Reactor.
Derive classes can change this strategy by overloading this method.
Definition at line 224 of file Acceptor.h.
References DL, ASSA::Address::getAddress(), ASSA::READ_EVENT, ASSA::TRACE, and trace.
{ trace("Acceptor::open"); if ( !m_listenSocket.open (local_addr_.getAddress ()->sa_family) ) { return -1; } if ( !m_listenSocket.bind (local_addr_) ) { return -1; } m_reactor->registerIOHandler ( this, m_listenSocket.getHandler (), READ_EVENT); DL((TRACE,"Opened acceptor for fd=%d\n", m_listenSocket.getHandler ())); return 0; }
PEER_ACCEPTOR ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::m_listenSocket [protected] |
Underlying communication stream.
Definition at line 123 of file Acceptor.h.
Reactor* ASSA::Acceptor< SERVICE_HANDLER, PEER_ACCEPTOR >::m_reactor [private] |
Reactor to use.
Definition at line 129 of file Acceptor.h.