42 template<
class SERVICE_HANDLER,
class PEER_ACCEPTOR>
68 virtual int close (
void);
134 #define SH SERVICE_HANDLER
135 #define PA PEER_ACCEPTOR
141 template<
class SH,
class PA>
147 trace(
"Acceptor::Acceptor");
150 template<
class SH,
class PA>
155 trace(
"Acceptor::~Acceptor");
158 template<
class SH,
class PA>
163 trace(
"Acceptor::close");
164 m_listenSocket.close ();
168 template<
class SH,
class PA>
173 trace(
"Acceptor::handle_close");
180 DL ((
REACT,
"Deleted acceptor \"%s\"\n", get_id ().c_str ()));
185 template<
class SH,
class PA>
186 inline SERVICE_HANDLER*
190 trace(
"Acceptor<>::makeServiceHandler");
192 return new SERVICE_HANDLER (sock_);
195 template<
class SH,
class PA>
200 trace(
"Acceptor::acceptServiceHandler");
202 new_socket_ = m_listenSocket.accept ();
203 return new_socket_ ? 0 : -1;
206 template<
class SH,
class PA>
int
210 trace(
"Acceptor::activateServiceHandler");
215 SH* sh = makeServiceHandler (new_socket_);
216 if (sh->open () < 0) {
222 template<
class SH,
class PA>
int
226 trace(
"Acceptor::open");
228 if ( !m_listenSocket.open (local_addr_.
getAddress ()->sa_family) ) {
232 if ( !m_listenSocket.bind (local_addr_) ) {
236 m_reactor->registerIOHandler (
237 this, m_listenSocket.getHandler (),
READ_EVENT);
239 DL((
TRACE,
"Opened acceptor for fd=%d\n",
240 m_listenSocket.getHandler ()));
250 template <
class SH,
class PA>
int
254 trace(
"Acceptor<>::handle_read");
257 timeval poll = {0, 0};
260 int fd = m_listenSocket.getHandler ();
267 if ( acceptServiceHandler (new_socket) == -1 ) {
270 if ( !activateServiceHandler (new_socket) == -1 ) {
276 while ((::select (fd+1, &mask, NULL, NULL, &poll) == 1));