X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketProtocol.hh;h=206f7ccf29cd0a804f26683cc204e7c4a257b78c;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=e4f9f211b5ef203bbab97c76a7749360ccbce531;hpb=04dd5d565dc0a5888f8d26bbcb12e9d325d6a4e5;p=senf.git diff --git a/Socket/SocketProtocol.hh b/Socket/SocketProtocol.hh index e4f9f21..206f7cc 100644 --- a/Socket/SocketProtocol.hh +++ b/Socket/SocketProtocol.hh @@ -29,7 +29,7 @@ the number of heap-allocations per socket to one which is good. */ -// The private inheritance idea should indeed work very well: We just need to chnage the +// The private inheritance idea should indeed work very well: We just need to change the // implementations of body() and protocol() and that of the ProtocolClient/ServerSocketHandle // constructors and the SocketBody constructor. The body and the protocol would still be visible // like several instances because of the private inheritance but we would save the backwards @@ -37,7 +37,22 @@ /** \defgroup protocol_group The Protocol Classes - \image html Protocols.png + \htmlonly + + SocketPolicy + ConcreteSocketProtocol + SocketProtocol + BSDSocketProtocol + AddressableBSDSocketProtocol + IPv4Protocol + IPv6Protocol + TCPProtocol + TCPv4SocketProtocol + TCPv6SocketProtocol + PacketProtocol + + Protocols + \endhtmlonly The socket handle classes and templates only implement the most important socket API methods using the policy framework. To access the complete API, the protocol interface is @@ -50,9 +65,9 @@ protocols are implemented using a simple multiple-inheritance hierarchy as shown above. Since the protocol class is protocol specific (how intelligent ...), the protocol class also - defines the complete socket policy to be used with it's protocol. Complete meaning, that every - policy axis must be assigned it's the most specific (that is derived) policy class to be used - with the protocol. + defines the \e complete socket policy to be used with it's protocol. Complete meaning, that + every policy axis must be assigned it's the most specific (that is derived) policy class to be + used with the protocol and that no policy axis is allowed to be left unspecified. \see \ref handle_group \n @@ -90,7 +105,8 @@ // Custom includes #include -/** \fixme this is not nice. The includes and predefs should be restructured */ +// Hrmpf ... I have tried very hard, but I just can't find a nice, generic way to clean +// up this include #include "SocketHandle.ih" //#include "SocketProtocol.mpp" @@ -110,7 +126,8 @@ namespace senf { \attention SocketProtocol must \e always be inherited using public \e virtual inheritance. */ - class SocketProtocol : boost::noncopyable + class SocketProtocol + : boost::noncopyable { public: /////////////////////////////////////////////////////////////////////////// @@ -152,9 +169,11 @@ namespace senf { ///< Return number of bytes available for reading without ///< blocking /**< This member will check in a (very, sigh) protocol - deqpendent way, how many bytes are guarateed to be + dependent way, how many bytes are guaranteed to be readable from the socket without blocking even if the - socket is blocking. */ + socket is blocking. If the socket does not support + reading (viz. NotReadablePolicy is set), this member + should always return \c 0.*/ virtual bool eof() const = 0; ///< Check for end-of-file condition /**< This is another check which (like available()) is @@ -218,7 +237,7 @@ namespace senf { SocketPolicy must be set to the complete socket policy of the protocol. A protocol implementation may define the protocol interface directly. It can also - (additnally) make use of multiple inheritance to combine a set of protocol facets into a + (additionally) make use of multiple inheritance to combine a set of protocol facets into a specific protocol implementation (i.e. TCPv4SocketProtocol inherits from ConcreteSocketProtocol and from the protocol facets IPv4Protocol, TCPProtocol, BSDSocketProtocol and AddressableBSDSocketProtocol). The protocol facets are not concrete @@ -276,4 +295,6 @@ namespace senf { // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: