X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FTCPSocketHandle.hh;h=47163b05132c001f6a40c7f530425517eaadb588;hb=e9230af25004d2e3eb041778afc493c5b300c43b;hp=01819813bb3820bd0d957d212e3d98cd73487d6d;hpb=ac6a813d9d99f7add4e13aff7a4bcd314d5604a6;p=senf.git diff --git a/Socket/TCPSocketHandle.hh b/Socket/TCPSocketHandle.hh index 0181981..47163b0 100644 --- a/Socket/TCPSocketHandle.hh +++ b/Socket/TCPSocketHandle.hh @@ -20,8 +20,12 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// TODO: Implement possibly non-blocking connect and SO_ERROR in the -// protocol interface +/** \file + \brief TCPv4SocketHandle and TCPv6SocketHandle public header + + \todo Implement possibly non-blocking connect and SO_ERROR in the + protocol interface + */ #ifndef HH_TCPSocketHandle_ #define HH_TCPSocketHandle_ 1 @@ -42,6 +46,8 @@ namespace senf { + /// \addtogroup concrete_protocol_group + /// @{ typedef MakeSocketPolicy< INet4AddressingPolicy, @@ -50,8 +56,30 @@ namespace senf { ReadablePolicy, WriteablePolicy, SocketBufferingPolicy - >::policy TCPv4Socket_Policy; - + >::policy TCPv4Socket_Policy; ///< Socket Policy of the TCPv4 Protocol + + /** \brief IPv4 TCP Socket Protocol + + \par Socket Handle typedefs: + \ref TCPv4ClientSocketHandle (ProtocolClientSocketHandle), \ref TCPv4ServerSocketHandle + (ProtocolServerSocketHandle) + + \par Protocol Interface: + ClientSocketHandle::read(), ClientSocketHandle::write(), ClientSocketHandle::bind(), + ClientSocketHandle::local(), ClientSocketHandle::connect(), ClientSocketHandle::peer(), + ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf() + + \par Address Type: + INet4Address + + TCPv4SocketProtocol provides an internet protocol stream socket based on the TCP protocol + and IPv4 addressing. + + This class is utilized as the protocol class of the ProtocolClientSocketHandle and + ProtocolServerSocketHandle via the Socket Handle typedefs above. + + \see TCPv6SocketProtocol + */ class TCPv4SocketProtocol : public ConcreteSocketProtocol, public IPv4Protocol, @@ -63,12 +91,44 @@ namespace senf { /////////////////////////////////////////////////////////////////////////// // internal interface - void init_client() const; + ///\name Constructors + ///@{ + + void init_client() const; ///< Create unconnected client socket + /**< \note This member is implicitly called from the + ProtocolClientSocketHandle::ProtocolClientSocketHandle() + constructor */ void init_client(INet4Address const & address) const; - void init_server() const; + ///< Create client socket and connect + /**< Creates a new client socket and connects to the given + address. + + \param[in] address remote address to connect to */ + /**< \note This member is implicitly called from the + ProtocolClientSocketHandle::ProtocolClientSocketHandle() + constructor */ + void init_server() const; ///< Create server socket + /**< \note This member is implicitly called from the + ProtocolServerSocketHandle::ProtocolServerSocketHandle() + constructor */ void init_server(INet4Address const & address, unsigned backlog=1) const; + ///< Create server socket and listen + /**< Creates a new server socket, binds to \a address end + starts listening for new connections with a backlog of + \a backlog connections. It also enables reuseaddr(). + + \param[in] address address to listen on + \param[in] backlog size of the listen backlog */ + /**< \note This member is implicitly called from the + ProtocolServerSocketHandle::ProtocolServerSocketHandle() + constructor */ + + ///@} + ///\name Abstract Interface Implementation std::auto_ptr clone() const; + + ///@} }; typedef ProtocolClientSocketHandle TCPv4ClientSocketHandle; @@ -79,6 +139,28 @@ namespace senf { INet6AddressingPolicy >::policy TCPv6Socket_Policy; + /** \brief IPv6 TCP Socket Protocol + + \par Socket Handle typedefs: + \ref TCPv6ClientSocketHandle (ProtocolClientSocketHandle), \ref TCPv6ServerSocketHandle + (ProtocolServerSocketHandle) + + \par Protocol Interface: + ClientSocketHandle::read(), ClientSocketHandle::write(), ClientSocketHandle::bind(), + ClientSocketHandle::local(), ClientSocketHandle::connect(), ClientSocketHandle::peer(), + ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf() + + \par Address Type: + INet6Address + + TCPv6SocketProtocol provides an internet protocol stream socket based on the TCP protocol + and IPv6 addressing. + + This class is utilized as the protocol class of the ProtocolClientSocketHandle and + ProtocolServerSocketHandle via the Socket Handle typedefs above. + + \see TCPv4SocketProtocol + */ class TCPv6SocketProtocol : public ConcreteSocketProtocol, public IPv6Protocol, @@ -86,12 +168,55 @@ namespace senf { public BSDSocketProtocol, public AddressableBSDSocketProtocol { - // TODO: Implement + public: + /////////////////////////////////////////////////////////////////////////// + // internal interface + + ///\name Constructors + ///@{ + + void init_client() const; ///< Create unconnected client socket + /**< \note This member is implicitly called from the + ProtocolClientSocketHandle::ProtocolClientSocketHandle() + constructor */ + void init_client(INet6SocketAddress const & address) const; + ///< Create client socket and connect + /**< Creates a new client socket and connects to the given + address. + + \param[in] address remote address to connect to */ + /**< \note This member is implicitly called from the + ProtocolClientSocketHandle::ProtocolClientSocketHandle() + constructor */ + void init_server() const; ///< Create server socket + /**< \note This member is implicitly called from the + ProtocolServerSocketHandle::ProtocolServerSocketHandle() + constructor */ + void init_server(INet6SocketAddress const & address, unsigned backlog=1) const; + ///< Create server socket and listen + /**< Creates a new server socket, binds to \a address end + starts listening for new connections with a backlog of + \a backlog connections. It also enables reuseaddr(). + + \param[in] address address to listen on + \param[in] backlog size of the listen backlog */ + /**< \note This member is implicitly called from the + ProtocolServerSocketHandle::ProtocolServerSocketHandle() + constructor */ + + ///@} + ///\name Abstract Interface Implementation + + std::auto_ptr clone() const; + + ///@} }; typedef ProtocolClientSocketHandle TCPv6ClientSocketHandle; typedef ProtocolServerSocketHandle TCPv6ServerSocketHandle; + /// @} + } ///////////////////////////////hh.e//////////////////////////////////////// @@ -104,4 +229,5 @@ namespace senf { // Local Variables: // mode: c++ // c-file-style: "senf" +// fill-column: 100 // End: