inline Error initLocalStreamAcceptor(
   SocketAcceptorService<boost::asio::local::stream_protocol>& acceptorService,
   const core::FilePath& localStreamPath)
{
   // initialize endpoint
   using boost::asio::local::stream_protocol;
   stream_protocol::endpoint endpoint(localStreamPath.absolutePath());
   
   // get acceptor
   stream_protocol::acceptor& acceptor = acceptorService.acceptor();
   
   // open
   boost::system::error_code ec;
   acceptor.open(endpoint.protocol(), ec) ;
   if (ec)
      return Error(ec, ERROR_LOCATION) ;
   
   // bind
   acceptor.bind(endpoint, ec) ;
   if (ec)
      return Error(ec, ERROR_LOCATION) ;
   
   // chmod on the stream file
   Error error = changeFileMode(localStreamPath,
                                system::EveryoneReadWriteMode);
   if (error)
      return error;
   
   // listen
   acceptor.listen(boost::asio::socket_base::max_connections, ec) ;
   if (ec)
      return Error(ec, ERROR_LOCATION) ;
   
   return Success() ;
}
inline Error initTcpIpAcceptor(
    SocketAcceptorService<boost::asio::ip::tcp>& acceptorService,
    const std::string& address,
    const std::string& port)
{
    using boost::asio::ip::tcp;

    tcp::resolver resolver(acceptorService.ioService()) ;
    tcp::resolver::query query(address, port) ;

    boost::system::error_code ec ;
    tcp::resolver::iterator entries = resolver.resolve(query,ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    tcp::acceptor& acceptor = acceptorService.acceptor();
    const tcp::endpoint& endpoint = *entries ;
    acceptor.open(endpoint.protocol(), ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    acceptor.set_option(tcp::acceptor::reuse_address(true), ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    acceptor.set_option(tcp::no_delay(true), ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    acceptor.bind(endpoint, ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    acceptor.listen(boost::asio::socket_base::max_connections, ec) ;
    if (ec)
        return Error(ec, ERROR_LOCATION) ;

    return Success() ;
}