X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FSocket%2FSocketProtocol.hh;h=b1193934558cad57680bdcd25da126fe34742b12;hb=d0c31526ac12869eed085891e3ae13e8b21072e6;hp=8538b17869b1f4f4fda1b940f0b3467586d12445;hpb=4d7356cbd92801bc0c4bec27fffe3b0024807185;p=senf.git diff --git a/senf/Socket/SocketProtocol.hh b/senf/Socket/SocketProtocol.hh index 8538b17..b119393 100644 --- a/senf/Socket/SocketProtocol.hh +++ b/senf/Socket/SocketProtocol.hh @@ -87,12 +87,12 @@ #include "SocketHandle.ih" //#include "SocketProtocol.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { /// \addtogroup protocol_group - /// @{ + //\{ class SocketPolicyBase; @@ -103,16 +103,16 @@ namespace senf { \attention SocketProtocol must \e always be inherited using public \e virtual inheritance. */ - class SocketProtocol + class SocketProtocol : boost::noncopyable { public: - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// // Types - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// ///\name Structors and default members - ///@{ + //\{ SocketProtocol(); virtual ~SocketProtocol() = 0; @@ -121,13 +121,13 @@ namespace senf { // no copy // no conversion constructors - ///@} - /////////////////////////////////////////////////////////////////////////// + //\} + //-//////////////////////////////////////////////////////////////////////// virtual SocketPolicyBase const & policy() const = 0; ///< Access the policy instance - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// // Virtual interface virtual unsigned available() const = 0; @@ -138,7 +138,7 @@ namespace senf { in a single (non-blocking) read operation. If the socket does not support reading (viz. NotReadablePolicy is set), this member should always return \c 0. - + Depending on the protocol, it may not be possible to return a good value. In this case, an upper bound may be returned (e.g.: When reading from a socket which @@ -159,16 +159,16 @@ namespace senf { virtual void close(); ///< Close socket /**< This override will automatically \c shutdown() the socket whenever it is closed. - \throws senf::SystemException + \throws senf::SystemException \fixme Move into (at least) BSDSOcketProtocol */ - + virtual void terminate() const; ///< Forcibly close socket /**< This override will automatically \c shutdown() the socket whenever it is called. Additionally it will disable SO_LINGER to ensure, that v_terminate will not block. Like the overriden method, this member will ignore failures and will never throw. It is therefore safe to be - called from a destructor. + called from a destructor. \fixme Move into (at least) BSDSocketProtocol */ virtual void state(SocketStateMap & map, unsigned lod) const; @@ -180,7 +180,7 @@ namespace senf { \a lod value with a default value of 0. The interpretation of the \a lod value is completely implementation defined. - + Every class derived from SocketProtocol should reimplement state(). The reimplemented method should call (all) baseclass-implementations of this @@ -191,21 +191,21 @@ namespace senf { keys are interpreted as hierarchical strings with '.' as a separator (like hostnames or struct or class members). They are automatically sorted correctly. - + The values are std:string with one additional feature: they allow assignment or conversion from *any* type as long as that type is streamable. This simplifies assigning non-string values to the map: - + \code map["socket.protocol.ip.address"] << peer(); map["socket.protocol.tcp.backlog"] << backlog(); \endcode - + This will work even if peer() returns an ip-address object or backlog() returns an integer. The values are automatically converted to their string representation. - + Additionally, if the slot the date is written to is not empty, the \<\< operator will add add a comma as separator. */ @@ -237,7 +237,7 @@ namespace senf { friend class SocketBody; }; - + template class ClientSocketHandle; template class ServerSocketHandle; @@ -256,7 +256,7 @@ namespace senf { protocols themselves, they are combined to build concrete protocols. This structure will remove a lot of code duplication. It is important to ensure, that the protocol facets do not overlap, since otherwise there will be problems resolving overlapping members. - + \doc init_client init_server */ template @@ -264,14 +264,14 @@ namespace senf { : public virtual SocketProtocol { public: - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// // Types typedef SocketPolicy Policy; ///< The protocols policy - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// ///\name Structors and default members - ///@{ + //\{ ~ConcreteSocketProtocol() = 0; @@ -279,13 +279,13 @@ namespace senf { // no copy // no conversion constructors - ///@} - /////////////////////////////////////////////////////////////////////////// + //\} + //-//////////////////////////////////////////////////////////////////////// Policy const & policy() const; - + protected: - ClientSocketHandle clientHandle() const; + ClientSocketHandle clientHandle() const; ///< Get client handle for associated socket /**< Returns a client handle for the socket associated with this protocol instance */ @@ -302,10 +302,10 @@ namespace senf { Policy policy_; }; - /// @} + //\} } -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #include "SocketProtocol.cci" //#include "SocketProtocol.ct" #include "SocketProtocol.cti"