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 accpept,
60 so listen() should debend on AddressingPolicy too. */
61 template <class Policy>
62 static int accept(ServerSocketHandle<Policy> handle,
63 typename ServerSocketHandle<Policy>::Address & address,
64 typename IfAddressingPolicyIsNot<Policy,NoAddressingPolicy>::type * = 0);
65 ///< accept a new connection on the socket.
66 /**< The accept() member will return a new client file
67 descriptor. This file descriptor will be used by the
68 ServerSocketHandle implementation to build a new
69 ClientSocketHandle for the new connection.
71 \param[in] handle socket handle to accept connection on
72 \param[out] address address of newly connected remote
74 \returns file descriptor of new client socket */
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 effektively disables ther ServerSocketHandle.
86 struct UnconnectedCommunicationPolicy : public CommunicationPolicyBase
94 ///////////////////////////////hh.e////////////////////////////////////////
95 //#include "CommunicationPolicy.cci"
96 //#include "CommunicationPolicy.ct"
97 #include "CommunicationPolicy.cti"
103 // c-file-style: "senf"