4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Stefan Bund <g0dil@berlios.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 UDPv4SocketHandle and UDPv6SocketHandle public header
26 \todo Implement possibly non-blocking connect and SO_ERROR in the
30 #ifndef HH_UDPSocketHandle_
31 #define HH_UDPSocketHandle_ 1
34 #include "INetSocketProtocol.hh"
35 #include "UDPSocketProtocol.hh"
36 #include "MulticastSocketProtocol.hh"
37 #include "../../../Socket/Protocols/BSDSocketProtocol.hh"
38 #include "../../../Socket/Protocols/DatagramSocketProtocol.hh"
39 #include "../../../Socket/FramingPolicy.hh"
40 #include "../../../Socket/CommunicationPolicy.hh"
41 #include "../../../Socket/ReadWritePolicy.hh"
42 #include "../../../Socket/ProtocolClientSocketHandle.hh"
44 //#include "UDPSocketHandle.mpp"
45 ///////////////////////////////hh.p////////////////////////////////////////
49 /// \addtogroup concrete_protocol_group
52 typedef MakeSocketPolicy<
53 INet4AddressingPolicy,
54 DatagramFramingPolicy,
55 UnconnectedCommunicationPolicy,
58 >::policy UDPv4Socket_Policy; ///< Socket Policy of the UDPv4 Protocol
60 /** \brief IPv4 UDP Socket Protocol
62 \par Socket Handle typedefs:
63 \ref UDPv4ClientSocketHandle (ProtocolClientSocketHandle)
65 \par Policy Interface:
66 ClientSocketHandle::read(), ClientSocketHandle::readfrom(),
67 ClientSocketHandle::writeto(), ClientSocketHandle::bind(), ClientSocketHandle::local()
72 UDPv4SocketProtocol provides an internet protocol stream socket based on the UDP protocol
75 This class is utilized as the protocol class of the ProtocolClientSocketHandle
76 via the Socket Handle typedefs above.
78 \see UDPv6SocketProtocol
80 class UDPv4SocketProtocol
81 : public ConcreteSocketProtocol<UDPv4Socket_Policy, UDPv4SocketProtocol>,
82 public UDPSocketProtocol,
83 public MulticastSocketProtocol,
84 public INet4MulticastSocketProtocol,
85 public BSDSocketProtocol,
86 public DatagramSocketProtocol,
87 public AddressableBSDSocketProtocol
90 ///////////////////////////////////////////////////////////////////////////
96 void init_client() const; ///< Create unconnected client socket
97 /**< \note This member is implicitly called from the
98 ProtocolClientSocketHandle::ProtocolClientSocketHandle()
100 void init_client(INet4SocketAddress const & address) const;
101 ///< Create client socket and bind
102 /**< Creates a new client socket and bind to the given
104 \param[in] address local address to bind to */
105 /**< \note This member is implicitly called from the
106 ProtocolClientSocketHandle::ProtocolClientSocketHandle()
113 typedef ProtocolClientSocketHandle<UDPv4SocketProtocol> UDPv4ClientSocketHandle;
115 typedef MakeSocketPolicy<
117 INet6AddressingPolicy
118 >::policy UDPv6Socket_Policy;
120 /** \brief IPv6 UDP Socket Protocol
122 \par Socket Handle typedefs:
123 \ref UDPv6ClientSocketHandle (ProtocolClientSocketHandle)
125 \par Policy Interface:
126 ClientSocketHandle::read(), ClientSocketHandle::readfrom(),
127 ClientSocketHandle::writeto(), ClientSocketHandle::bind(), ClientSocketHandle::local()
132 UDPv6SocketProtocol provides an internet protocol stream socket based on the UDP protocol
135 This class is utilized as the protocol class of the ProtocolClientSocketHandle
136 via the Socket Handle typedefs above.
138 \see UDPv4SocketProtocol
140 class UDPv6SocketProtocol
141 : public ConcreteSocketProtocol<UDPv6Socket_Policy, UDPv6SocketProtocol>,
142 public UDPSocketProtocol,
143 public MulticastSocketProtocol,
144 public INet6MulticastSocketProtocol,
145 public BSDSocketProtocol,
146 public DatagramSocketProtocol,
147 public AddressableBSDSocketProtocol
150 ///////////////////////////////////////////////////////////////////////////
151 // internal interface
153 ///\name Constructors
156 void init_client() const; ///< Create unconnected client socket
157 /**< \note This member is implicitly called from the
158 ProtocolClientSocketHandle::ProtocolClientSocketHandle()
160 void init_client(INet6SocketAddress const & address) const;
161 ///< Create client socket and connect
162 /**< Creates a new client socket and bind to the given
164 \param[in] address local address to bind to */
165 /**< \note This member is implicitly called from the
166 ProtocolClientSocketHandle::ProtocolClientSocketHandle()
172 typedef ProtocolClientSocketHandle<UDPv6SocketProtocol> UDPv6ClientSocketHandle;
178 ///////////////////////////////hh.e////////////////////////////////////////
179 //#include "UDPSocketHandle.cci"
180 //#include "UDPSocketHandle.ct"
181 //#include "UDPSocketHandle.cti"
188 // c-file-style: "senf"
189 // indent-tabs-mode: nil
190 // ispell-local-dictionary: "american"
191 // compile-command: "scons -u test"
192 // comment-column: 40