X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FGenericAddressingPolicy.hh;h=f4e82162b404634937cec97a01b28876da32ffd4;hb=a8a6c2992968ee32cbc0244851e25b57a03a323a;hp=fa7f5d193e5f3bab12d7a796fd93c9a8e5737492;hpb=ac6a813d9d99f7add4e13aff7a4bcd314d5604a6;p=senf.git diff --git a/Socket/GenericAddressingPolicy.hh b/Socket/GenericAddressingPolicy.hh index fa7f5d1..f4e8216 100644 --- a/Socket/GenericAddressingPolicy.hh +++ b/Socket/GenericAddressingPolicy.hh @@ -20,6 +20,10 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +/** \file + \brief GenericAddressingPolicy public header + */ + #ifndef HH_GenericAddressingPolicy_ #define HH_GenericAddressingPolicy_ 1 @@ -34,7 +38,13 @@ namespace senf { + /// \addtogroup policy_impl_group + /// @{ + + /** \brief Non-template implemenatation class of GenericAddressingPolicy template + \internal + */ struct GenericAddressingPolicy_Base { static void do_local(FileHandle handle, struct sockaddr * addr, unsigned len); @@ -43,6 +53,26 @@ namespace senf { static void do_connect(FileHandle handle, struct sockaddr const * addr, unsigned len); }; + /** \brief Template for generic AddressingPolicy implementation based on the BSD socket API + + This template provides an implementation template to implement generic addressing policy + classes which rely on the standard BSD socket API for their implementation + (connect/bind/getsockname/getpeername). + + The \a Address template parameter specifies the address type of the addressing policy. This + type must have two members: \c sockaddr_p() and \c sockaddr_len(). The first must return a + struct sockaddr * to the address, the second must return the size of the address in + bytes. The pointer returned by \c sockaddr_p() must be non-const if called on a non-const + address. The underlying socket address stored at that pointer might be + modified. + + \idea We could explicitly provide open_sockaddr_p() and close_sockaddr_p() + members. sockaddr_p could always return a const * whereas open_sockaddr_p should return a + non-const pointer. The close operation would then explicitly signal, that the new value + should be incorporated into the class. With our current implementation, the close member + would be a no-op, however this ould free us from using the sockaddr values as a direct + sotrage representation of the address. + */ template struct GenericAddressingPolicy : private GenericAddressingPolicy_Base @@ -50,14 +80,35 @@ namespace senf { template static void peer(SocketHandle handle, Address & addr, typename IfCommunicationPolicyIs::type * = 0); + ///< Return address of remote peer on connected sockets + /**< This member is only available if the socket handles + communication policy is ConnectedCommunicationPolicy. + + \param[in] handle socket handle to get peer address of + \param[out] addr address of remote peer */ static void local(FileHandle handle, Address & addr); + ///< Return local of socket + /**< \param[in] handle socket handle to check + \param[out] addr local socket address */ template static void connect(SocketHandle handle, Address const & addr, typename IfCommunicationPolicyIs::type * = 0); + ///< Connect to remote host + /**< This member is only available if the socket handles + communication policy is ConnectedCommunicationPolicy. + + \param[in] handle socket handle + \param[in] address address of remote peer to connect + to */ static void bind(FileHandle handle, Address const & addr); + ///< Set local socket address + /**< \param[in] handle socket handle + \param[in] addr local socket address */ }; + /// @} + } ///////////////////////////////hh.e//////////////////////////////////////// @@ -71,4 +122,5 @@ namespace senf { // Local Variables: // mode: c++ // c-file-style: "senf" +// fill-column: 100 // End: