// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Stefan Bund <g0dil@berlios.de>
//
// 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
\brief CommunicationPolicy public header
*/
-#ifndef HH_CommunicationPolicy_
-#define HH_CommunicationPolicy_ 1
+#ifndef HH_SENF_Socket_CommunicationPolicy_
+#define HH_SENF_Socket_CommunicationPolicy_ 1
// Custom includes
#include "SocketPolicy.hh"
/// \addtogroup policy_impl_group
/// @{
- template <class Policy> class ServerSocketHandle;
+ template <class SPolicy> class ServerSocketHandle;
/** \brief CommunicationPolicy for connected sockets
*/
struct ConnectedCommunicationPolicy : public CommunicationPolicyBase
{
- static void listen(FileHandle handle, unsigned backlog);
+# ifndef DOXYGEN
+ template <class SPolicy>
+ static void listen(ServerSocketHandle<SPolicy> handle, unsigned backlog,
+ typename IfAddressingPolicyIsNot<SPolicy,NoAddressingPolicy>::type * = 0);
+# else
+ template <class SPolicy>
+ static void listen(ServerSocketHandle<SPolicy> handle, unsigned backlog);
///< Enable establishing new connections on the socket
/**< \param[in] handle socket handle to enable reception on
- \param[in] backlog size of backlog queue
-
- \fixme listen probably makes no sense without accept,
- so listen() should depend on AddressingPolicy
- too. */
- template <class Policy>
- static int accept(ServerSocketHandle<Policy> handle,
- typename ServerSocketHandle<Policy>::Address & address,
- typename IfAddressingPolicyIsNot<Policy,NoAddressingPolicy>::type * = 0);
+ \param[in] backlog size of backlog queue */
+# endif
+
+# ifndef DOXYGEN
+ template <class SPolicy>
+ static int accept(ServerSocketHandle<SPolicy> handle,
+ typename ServerSocketHandle<SPolicy>::Address & address,
+ typename IfAddressingPolicyIsNot<SPolicy,NoAddressingPolicy>::type * = 0);
+# else
+ template <class SPolicy>
+ static int accept(ServerSocketHandle<SPolicy> handle,
+ typename ServerSocketHandle<SPolicy>::Address & address);
///< accept a new connection on the socket.
/**< The accept() member will return a new client file
descriptor. This file descriptor will be used by the
\param[out] address address of newly connected remote
peer
\returns file descriptor of new client socket */
+# endif
+
+ static int accept(FileHandle handle);
+ ///< accept a new connection on the socket.
+ /**< The accept() member will return a new client file
+ descriptor. This file descriptor will be used by the
+ ServerSocketHandle implementation to build a new
+ ClientSocketHandle for the new connection.
+
+ \param[in] handle socket handle to accept connection on
+ \returns file descriptor of new client socket */
+
private:
+ static void do_listen(FileHandle handle, unsigned backlog);
static int do_accept(FileHandle handle, struct sockaddr * addr, unsigned len);
};
///////////////////////////////hh.e////////////////////////////////////////
-//#include "CommunicationPolicy.cci"
+#include "CommunicationPolicy.cci"
//#include "CommunicationPolicy.ct"
#include "CommunicationPolicy.cti"
#endif
// c-file-style: "senf"
// indent-tabs-mode: nil
// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
// End: