ACE Tutorial 005
On the road to a multithreaded server


Now, let's take a look at client_acceptor.h.  Since I went on about how it does all the work of letting clients connect to us, it must be rather complext.  Right?  Wrong.

The more you use ACE, the more you'll find that they've already taken care of most details for you.  With respect to the acceptance of client connections:  there just aren't that many ways to do it!  The ACE team has chosen an approach and created a C++ template that does all of the work for you.  All you're required to do is provide it with an object type to instantiate when a new connection arrives.


// $Id: page03.html,v 1.2 1998/08/30 23:47:13 schmidt Exp $

#ifndef  CLIENT_ACCEPTOR_H
#define CLIENT_ACCEPTOR_H

/*
 The ACE_Acceptor<> template lives in the ace/Acceptor.h header file.
 You'll find a very consitent naming convention between the ACE objects
 and the headers where they can be found.  In general, the ACE object
 ACE_Foobar will be found in ace/Foobar.h.
 */

#include "ace/Acceptor.h"

/*
 Since we want to work with sockets, we'll need a SOCK_Acceptor to allow
 the clients to connect to us.
 */
#include "ace/SOCK_Acceptor.h"

/*
 The Client_Handler object we develop will be used to handle clients
 once they're connected.  The ACE_Acceptor<> template's first parameter
 requires such an object.  In some cases, you can get by with just a
 forward declaration on the class, in others you have to have the whole
 thing.
 */
#include "client_handler.h"

/*
 Parameterize the ACE_Acceptor<> such that it will listen for socket
 connection attempts and create Client_Handler objects when they happen.
 In Tutorial 001, we wrote the basic acceptor logic on our own before
 we realized that ACE_Acceptor<> was available.  You'll get spoiled using
 the ACE templates because they take away a lot of the tedious details!
 */
typedef ACE_Acceptor < Client_Handler, ACE_SOCK_ACCEPTOR > Client_Acceptor;

#endif // CLIENT_ACCEPTOR_H


[Tutorial Index] [Continue This Tutorial]