Listing 3: NetworkService, a generic network server.

struct NetworkService
{
  ...
  // sub-classes overwrite this method and close socket 
  virtual void ServiceHandler(int socket) = 0;
  virtual bool stop() { return false; } 
  void operator()()
  {
    int server = createServerSocket(
      sourcePort, lengthWaitList+1);
    if(server < 0)
    {
      std::cout << "Can't bind to port " 
        << sourcePort << std::endl;
      return;
    }
    RunPool<SocketHandler> pool(numThreads);
    ThreadPool<SocketHandler> thpool(pool, 
      numThreads > 256 ? 256 : numThreads);
    // start the pool...
    boost::thread thrd(thpool);
    std::cout << "Ready... service at port " 
      << sourcePort << std::endl;
    while (!stop())
    {
      struct   sockaddr_in pin;
      int source = acceptClientSocket(server, pin);
      if(source < 0) continue;
      // put handler on the heap so we can delete this later...
      SocketHandler * linkage = new SocketHandler(*this, source);
      thpool.execute(linkage);
    }
    thrd.join();
    CloseConnection(server);  
    std::cout << "Shutting down network service " 
      << serviceId << " at port " << sourcePort 
      << std::endl; 
  }
  ...
};
void SocketHandler::operator()() 
{
  try 
  {
    ns_.ServiceHandler(client_);
  } catch (...) {}
  delete this;
}