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 static void listen(FileHandle handle, unsigned backlog);
55 ///< Enable establishing new connections on the socket
56 /**< \param[in] handle socket handle to enable reception on
57 \param[in] backlog size of backlog queue
59 \fixme listen probably makes no sense without accept,
60 so listen() should depend on AddressingPolicy
62 template <class Policy>
63 static int accept(ServerSocketHandle<Policy> handle,
64 typename ServerSocketHandle<Policy>::Address & address,
65 typename IfAddressingPolicyIsNot<Policy,NoAddressingPolicy>::type * = 0);
66 ///< accept a new connection on the socket.
67 /**< The accept() member will return a new client file
68 descriptor. This file descriptor will be used by the
69 ServerSocketHandle implementation to build a new
70 ClientSocketHandle for the new connection.
72 \param[in] handle socket handle to accept connection on
73 \param[out] address address of newly connected remote
75 \returns file descriptor of new client socket */
77 static int do_accept(FileHandle handle, struct sockaddr * addr, unsigned len);
80 /** \brief CommunicationPolicy for unconnected sockets
82 This is different from UndefinedCommunicationPolicy (which is the same as
83 CommunicationPolicyBase). This policy class defines the communication policy -- it
84 explicitly states, that the socket does not support connected communication. This
85 effectively disables the ServerSocketHandle.
87 struct UnconnectedCommunicationPolicy : public CommunicationPolicyBase
95 ///////////////////////////////hh.e////////////////////////////////////////
96 //#include "CommunicationPolicy.cci"
97 //#include "CommunicationPolicy.ct"
98 #include "CommunicationPolicy.cti"
105 // c-file-style: "senf"
106 // indent-tabs-mode: nil
107 // ispell-local-dictionary: "american"