X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketProtocol.hh;h=50301f94d983d8e865b0f543032f169297df3a95;hb=6f50bf49e282c0528f51faa0a245bbfa2b867399;hp=fa8d0ff57143e91d2ab7e08ddaf57e1bcf45a61c;hpb=5ed1fa1c42763aebad06c1e4ac8fc5a19e15519a;p=senf.git diff --git a/Socket/SocketProtocol.hh b/Socket/SocketProtocol.hh index fa8d0ff..50301f9 100644 --- a/Socket/SocketProtocol.hh +++ b/Socket/SocketProtocol.hh @@ -153,17 +153,9 @@ namespace senf { /////////////////////////////////////////////////////////////////////////// // Virtual interface - virtual std::auto_ptr clone() const = 0; - ///< Polymorphically return a copy of this protocol class - /**< This member will create a new copy of the protocol - class on the heap. - \attention This member must be implemented in every \e - leaf protocol class to return a new instance of the - appropriate type. */ - virtual unsigned available() const = 0; - ///< Return number of bytes available for reading without - ///< blocking + ///< Return (maximum) number of bytes available for reading + ///< without < blocking /**< This member will check in a (very, sigh) protocol dependent way, how many bytes may be read from a socket in a single (non-blocking) read operation. If the @@ -176,9 +168,9 @@ namespace senf { returns ethernet frames, returning 1500 from available() is ok). However, this should only be done as a last resort. Also beware, that this number should - not be to large since the socket layer will always need - to allocate that number of bytes for the data to be - read. */ + not be too large since the socket layer will always + need to allocate that number of bytes for the data to + be read. */ virtual bool eof() const = 0; ///< Check for end-of-file condition /**< This is another check which (like available()) is @@ -260,11 +252,10 @@ namespace senf { ::dup2()). */ private: - // backpointer to owning SocketBody instance - - SocketBody & body() const; + virtual std::auto_ptr clone(bool isServer) const = 0; + virtual std::auto_ptr clone(int fd, bool isServer) const = 0; + virtual SocketBody & body() const = 0; - SocketBody * body_; friend class SocketBody; }; @@ -288,7 +279,7 @@ namespace senf { \doc init_client init_server */ - template + template class ConcreteSocketProtocol : public virtual SocketProtocol { @@ -312,7 +303,7 @@ namespace senf { /////////////////////////////////////////////////////////////////////////// Policy const & policy() const; - + protected: ClientSocketHandle clientHandle() const; ///< Get client handle for associated socket @@ -324,8 +315,11 @@ namespace senf { this protocol instance */ private: - Policy policy_; + virtual std::auto_ptr clone(bool isServer) const; + virtual std::auto_ptr clone(int fd, bool isServer) const; + virtual SocketBody & body() const; + Policy policy_; }; /// @}