X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FServerSocketHandle.hh;h=235b5903e3484c414d82d21d2a006ebfb0c052b1;hb=532240d72e09e19e57fac9bb55c2560b9c9e5b97;hp=7c84d93bb531bce40e69c22fccca2221d46077f3;hpb=245bdb920e5f8fc1150794db8d0b42a15fa2cd15;p=senf.git diff --git a/Socket/ServerSocketHandle.hh b/Socket/ServerSocketHandle.hh index 7c84d93..235b590 100644 --- a/Socket/ServerSocketHandle.hh +++ b/Socket/ServerSocketHandle.hh @@ -1,9 +1,9 @@ -// $Id$ +// $Id:ServerSocketHandle.hh 218 2007-03-20 14:39:32Z tho $ // -// Copyright (C) 2006 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Copyright (C) 2006 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Stefan Bund // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -24,8 +24,8 @@ \brief ServerSocketHandle public header */ -#ifndef HH_ServerSocketHandle_ -#define HH_ServerSocketHandle_ 1 +#ifndef HH_SENF_Socket_ServerSocketHandle_ +#define HH_SENF_Socket_ServerSocketHandle_ 1 // Custom includes #include @@ -42,71 +42,75 @@ namespace senf { /// \addtogroup handle_group /// @{ - template class ClientSocketHandle; + template class ClientSocketHandle; /** \brief Generic SocketHandle with server interface - This class provides the server side policy interface of the socket abstraction. - ServerSocketHandle defines the complete policy interface. It does not implement any - functionality itself however. All calls are forwarded to the following policy classes: - - - - - - - -
senf::ServerSocketHandle::bind AddressingPolicy::bind (\ref senf::AddressingPolicyBase)
senf::ServerSocketHandle::listen CommunicationPolicy::listen (\ref senf::CommunicationPolicyBase)
senf::ServerSocketHandle::local AddressingPolicy::local (\ref senf::AddressingPolicyBase)
senf::ServerSocketHandle::accept CommunicationPolicy::accept (\ref senf::CommunicationPolicyBase)
senf::ServerSocketHandle::acceptfrom CommunicationPolicy::accept (\ref senf::CommunicationPolicyBase)
- - A ServerSocketHandle is only meaningful for connection oriented addressable protocols - (CommunicationPolicy is ConnectedCommunicationPolicy and AddressingPolicy is not - NoAddressingPolicy). - - It is important to note, that not all members are always accessible. Which are depends on - the \c Policy template argument. If any of the policy axis is left unspecified the - corresponding members will not be callable (you will get a compile time error). Even if - every policy axis is defined, some members might (and will) not exist if they are - meaningless for the protocol of the socket. This depends on the exact policy. - - To find out, which members are available, you have to check the documentation of the policy - classes. You can also find a summary of all members available in the leaf protocol class - documentation. + This class provides the server side policy interface of the socket abstraction. + ServerSocketHandle defines the complete policy interface. It does not implement any + functionality itself however. All calls are forwarded to the following policy classes: + + + + + + + +
senf::ServerSocketHandle::bind AddressingPolicy::bind (\ref senf::AddressingPolicyBase)
senf::ServerSocketHandle::listen CommunicationPolicy::listen (\ref senf::CommunicationPolicyBase)
senf::ServerSocketHandle::local AddressingPolicy::local (\ref senf::AddressingPolicyBase)
senf::ServerSocketHandle::accept CommunicationPolicy::accept (\ref senf::CommunicationPolicyBase)
senf::ServerSocketHandle::acceptfrom CommunicationPolicy::accept (\ref senf::CommunicationPolicyBase)
+ + A ServerSocketHandle is only meaningful for connection oriented addressable protocols + (CommunicationPolicy is ConnectedCommunicationPolicy and AddressingPolicy is not + NoAddressingPolicy). + + It is important to note, that not all members are always accessible. Which are depends on + the \c Policy template argument. If any of the policy axis is left unspecified the + corresponding members will not be callable (you will get a compile time error). Even if + every policy axis is defined, some members might (and will) not exist if they are + meaningless for the protocol of the socket. This depends on the exact policy. + + To find out, which members are available, you have to check the documentation of the policy + classes. You can also find a summary of all members available in the leaf protocol class + documentation. */ - template + template class ServerSocketHandle - : public SocketHandle + : public SocketHandle { public: /////////////////////////////////////////////////////////////////////////// // Types - /// Address type from the addressing policy - typedef typename Policy::AddressingPolicy::Address Address; - /// 'Best' type for passing address as parameter - /** Depending on the type of \c Address, this will be either Address or Address - const &. See call_traits documentation in the Boost.Utility library\endlink. - */ + /// Address type from the addressing policy + typedef typename SPolicy::AddressingPolicy::Address Address; + /// 'Best' type for passing address as parameter + /** Depending on the type of \c Address, this will be either Address or Address + const &. See call_traits documentation in + the Boost.Utility library. + */ typedef typename boost::call_traits
::param_type AddressParam; - /// Corresponding client socket handle with the same policy - typedef ClientSocketHandle ClientSocketHandle; + /// Corresponding client socket handle with the same policy + typedef ClientSocketHandle ClientHandle; /////////////////////////////////////////////////////////////////////////// ///\name Structors and default members ///@{ - // no default constructor + // default default constructor // default copy constructor // default copy assignment // default destructor + // here to implement + ServerSocketHandle(); + // conversion constructors template ServerSocketHandle(ServerSocketHandle other, - typename SocketHandle::template IsCompatible::type * = 0); + typename SocketHandle::template IsCompatible::type * = 0); template - typename SocketHandle::template IsCompatible::type const & + typename SocketHandle::template IsCompatible::type const & operator=(ServerSocketHandle other); ///@} @@ -116,76 +120,73 @@ namespace senf { ///\name Server socket interface ///@{ - /** \brief Set local address - - For addressable protocols (AddressingPolicy is not NoAddressingPolicy), bind() will set - the local address of the socket. + /** \brief Set local address + + For addressable protocols (AddressingPolicy is not NoAddressingPolicy), bind() will set + the local address of the socket. - \param[in] addr Local socket address to asign + \param[in] addr Local socket address to assign - \throws senf::SystemException - */ + \throws senf::SystemException + */ void bind (AddressParam addr); - /** \brief Allow clients to connect to this server socket - - \todo This is very protocol specific, I don't want it in the policy - interface. Especially the backlog argument seems quite protocol specific to - me. However, we cannot listen() before we bind() so listen() cannot reside in the - constructor. We need to find a good solution here. - - \throws senf::SystemException - */ - // Possible solution: Make listen() an abstract method of the protocol interface, make the - // backlog parameter into a member living in the body or protocol class and set it using - // some accessor. Hmm ... this all seems somehow futile ... + /** \brief Allow clients to connect to this server socket + + \todo This is very protocol specific, I don't want it in the policy + interface. Especially the backlog argument seems quite protocol specific to + me. However, we cannot listen() before we bind() so listen() cannot reside in the + constructor. We need to find a good solution here. + + \throws senf::SystemException + */ + // Possible solution: Make listen() an abstract method of the protocol interface, make the + // backlog parameter into a member living in the body or protocol class and set it using + // some accessor. Hmm ... this all seems somehow futile ... void listen (unsigned backlog=0); - /** \brief Query local address + /** \brief Query local address - This member will return the address of the local socket in addressable protocols - (AddressingPolicy is not NoAddressingPolicy). + This member will return the address of the local socket in addressable protocols + (AddressingPolicy is not NoAddressingPolicy). - There are two Variants of this member, one will return the address by value, the other - takes a reference argument to elide the copy operation. + There are two Variants of this member, one will return the address by value, the other + takes a reference argument to elide the copy operation. - \throws senf::SystemException - */ + \throws senf::SystemException + */ Address local (); void local (Address & addr); ///< Query local address /**< \see \ref local() */ - - /** \brief Accept new connection - If the handle is non-blocking, accept will NOT block. If no connection - is available to be returned, accept will return a ClientSocketHandle - which is not valid() + /** \brief Accept new connection + + If the handle is non-blocking, accept will NOT block. If no connection is available to + be returned, accept will return a ClientSocketHandle which is not valid() - \throws senf::SystemException + \throws senf::SystemException - This variant ... + This variant ... - \returns handle of new client connection - */ - ClientSocketHandle - accept (); - std::pair - acceptfrom (); ///< Accept new connection + \returns handle of new client connection + */ + ClientHandle accept (); + std::pair + acceptfrom (); ///< Accept new connection /**< This variant will additionally return the remote - address of the client - \returns \c std::pair with client handle and client - address. - \see \ref accept() */ - ClientSocketHandle - acceptfrom (Address & addr); + address of the client + \returns \c std::pair with client handle and client + address. + \see \ref accept() */ + ClientHandle acceptfrom (Address & addr); ///< Accept new connection /**< This variant will additionally return the remote - address of the client - \param[out] client address - \returns handle of new client connection - \see \ref accept() */ - + address of the client + \param[out] addr address + \returns handle of new client connection + \see \ref accept() */ + ///@} static ServerSocketHandle cast_static(FileHandle handle); @@ -197,10 +198,10 @@ namespace senf { protected: ServerSocketHandle(FileHandle other, bool isChecked); - explicit ServerSocketHandle(std::auto_ptr protocol); + explicit ServerSocketHandle(std::auto_ptr body); private: - + }; /// @} @@ -215,6 +216,10 @@ namespace senf { // Local Variables: // mode: c++ -// c-file-style: "senf" // fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: