4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <stefan.bund@fokus.fraunhofer.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief CommunicationPolicy public header
27 #ifndef HH_CommunicationPolicy_
28 #define HH_CommunicationPolicy_ 1
31 #include "SocketPolicy.hh"
32 #include "AddressingPolicy.hh"
33 #include "FileHandle.hh"
35 //#include "CommunicationPolicy.mpp"
36 ///////////////////////////////hh.p////////////////////////////////////////
42 /// \addtogroup policy_impl_group
45 template <class Policy> class ServerSocketHandle;
47 /** \brief CommunicationPolicy for connected sockets
49 The ConnectedCommunicationPolicy provides support for standard BSD socket API based
50 connected communication. It provides the server side listen() and accept() members.
52 struct ConnectedCommunicationPolicy : public CommunicationPolicyBase
54 template <class Policy>
55 static void listen(ServerSocketHandle<Policy> handle, unsigned backlog,
56 typename IfAddressingPolicyIsNot<Policy,NoAddressingPolicy>::type * = 0);
57 ///< Enable establishing new connections on the socket
58 /**< \param[in] handle socket handle to enable reception on
59 \param[in] backlog size of backlog queue */
60 template <class Policy>
61 static int accept(ServerSocketHandle<Policy> handle,
62 typename ServerSocketHandle<Policy>::Address & address,
63 typename IfAddressingPolicyIsNot<Policy,NoAddressingPolicy>::type * = 0);
64 ///< accept a new connection on the socket.
65 /**< The accept() member will return a new client file
66 descriptor. This file descriptor will be used by the
67 ServerSocketHandle implementation to build a new
68 ClientSocketHandle for the new connection.
70 \param[in] handle socket handle to accept connection on
71 \param[out] address address of newly connected remote
73 \returns file descriptor of new client socket */
75 static void do_listen(FileHandle handle, unsigned backlog);
76 static int do_accept(FileHandle handle, struct sockaddr * addr, unsigned len);
79 /** \brief CommunicationPolicy for unconnected sockets
81 This is different from UndefinedCommunicationPolicy (which is the same as
82 CommunicationPolicyBase). This policy class defines the communication policy -- it
83 explicitly states, that the socket does not support connected communication. This
84 effectively disables the ServerSocketHandle.
86 struct UnconnectedCommunicationPolicy : public CommunicationPolicyBase
94 ///////////////////////////////hh.e////////////////////////////////////////
95 //#include "CommunicationPolicy.cci"
96 //#include "CommunicationPolicy.ct"
97 #include "CommunicationPolicy.cti"
104 // c-file-style: "senf"
105 // indent-tabs-mode: nil
106 // ispell-local-dictionary: "american"
107 // compile-command: "scons -u test"
108 // comment-column: 40