Boost logo

Boost :

From: Michel André (michel.andre_at_[hidden])
Date: 2005-04-18 13:13:47


Boris wrote:
> Michel André wrote:

>
> Agreed. In the beginning acceptor and connector in
> http://www.highscore.de/boost/net/basic.png were called server and client
> until someone complained. Now I also like acceptor/connector better than
> server/client but if they remind developers of the acceptor-connector
> pattern that's no good. However I don't know any better name in the moment -
> if you have an idea please tell me. :)

Wish I had ;). Actually I don't think there should be a specific
inheritance hierarchy (I don't really see what benefits it would do for
developers familiar with sockets). On level 0 just the class socket that
mimicks berkely sockets quite closely but only adds raii and unified
error reporting and exception based. (Or as in giallo
http://cvs.sourceforge.net/viewcvs.py/giallo/giallo/boost/net/socket/socket.hpp?view=markup)

     /// Facade for the socket api
     class socket
     {
       socket(
         const address_family& address_family,
         const socket_type& type,
         const protocol& protocol);

       io_result bind(address& addr);
       io_result listen(size_t backlog);
       io_result accept(socket& client, address& add);

       io_result connect(address& add);

       io_result recv(void* data, size_t len, int flags=0);
       io_result send(const void* data, size_t len, int flags=0);

       static io_result gethostbyname(
         const std::string& host,
         std::string& h_name,
         std::vector<std::string>& h_aliases, // alternate names
         std::vector<address>& h_addr_list // known addresses
         );

        ...
     }

You get the idea.

> However I took over your ideas about ACE and updated the package diagram at
> http://www.highscore.de/boost/net/packages.png. If we forget about the two
> yellow packages for a moment:
> * The red package belongs to level 0. I changed the name and now call it
> berkeley to emphasize that this package contains a C++ API of what is known
> to many programmers as Berkeley sockets. The idea of this package is that
> network developers who glance at the C++ network library recognize many
> concepts and switch over. They should look at the documentation, see a class
> socket and think: "I know everything about sockets - I can use these classes
> immediately."
> * The blue packages belong to level 1. I introduced a new package called ace
> because of the acceptor-connector pattern which is used in ACE. This package
> is for network programmers who look at the documentation, see
> application-level concepts and think: "I can connect my application to the
> network without understanding sockets."
>
>
> The package names were made up on the spot - there are probably better ones.
> The design however comes close to what we had already in the Wiki (see
> http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket):
> There are two levels described - one as a wrapper for the C API (the
> berkeley package), the other one for connector, acceptor and data connection
> (our ace package). BoostSocket/Streams is the iostream package in the
> diagram. The multiplexing library I once proposed myself is one of the four
> supported I/O models which can be used in level 0 (there must be something
> similar to select()) and in level 1 (if we follow ACE there will be
> something like the Reactor class).

This is as you state the same approach as outined in the BoostSocket
writings and Hugo Duncan implemented in giallo
(http://giallo.sourceforge.net/).

I also think there is another fundamental question, should we go the
route proposed in giallo which is template based or a more
ineritance/interface based approach?

As we have to do with network io virtual dispatch wouldn't be a problem?

/Michel


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk