]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // datagram_protocol.cpp | |
3 | // ~~~~~~~~~~~~~~~~~~~~~ | |
4 | // | |
b32b8144 | 5 | // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
7c673cae FG |
6 | // |
7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 | // | |
10 | ||
11 | // Disable autolinking for unit tests. | |
12 | #if !defined(BOOST_ALL_NO_LIB) | |
13 | #define BOOST_ALL_NO_LIB 1 | |
14 | #endif // !defined(BOOST_ALL_NO_LIB) | |
15 | ||
16 | // Test that header file is self-contained. | |
17 | #include <boost/asio/local/datagram_protocol.hpp> | |
18 | ||
19 | #include <cstring> | |
b32b8144 | 20 | #include <boost/asio/io_context.hpp> |
7c673cae FG |
21 | #include "../unit_test.hpp" |
22 | ||
23 | //------------------------------------------------------------------------------ | |
24 | ||
25 | // local_datagram_protocol_socket_compile test | |
26 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
27 | // The following test checks that all public member functions on the class | |
28 | // local::datagram_socket::socket compile and link correctly. Runtime failures | |
29 | // are ignored. | |
30 | ||
31 | namespace local_datagram_protocol_socket_compile { | |
32 | ||
33 | void connect_handler(const boost::system::error_code&) | |
34 | { | |
35 | } | |
36 | ||
37 | void send_handler(const boost::system::error_code&, std::size_t) | |
38 | { | |
39 | } | |
40 | ||
41 | void receive_handler(const boost::system::error_code&, std::size_t) | |
42 | { | |
43 | } | |
44 | ||
45 | void test() | |
46 | { | |
47 | #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) | |
48 | using namespace boost::asio; | |
49 | namespace local = boost::asio::local; | |
50 | typedef local::datagram_protocol dp; | |
51 | ||
52 | try | |
53 | { | |
b32b8144 | 54 | io_context ioc; |
7c673cae FG |
55 | char mutable_char_buffer[128] = ""; |
56 | const char const_char_buffer[128] = ""; | |
57 | socket_base::message_flags in_flags = 0; | |
58 | socket_base::send_buffer_size socket_option; | |
59 | socket_base::bytes_readable io_control_command; | |
60 | boost::system::error_code ec; | |
61 | ||
62 | // basic_datagram_socket constructors. | |
63 | ||
b32b8144 FG |
64 | dp::socket socket1(ioc); |
65 | dp::socket socket2(ioc, dp()); | |
66 | dp::socket socket3(ioc, dp::endpoint("")); | |
7c673cae | 67 | int native_socket1 = ::socket(AF_UNIX, SOCK_DGRAM, 0); |
b32b8144 | 68 | dp::socket socket4(ioc, dp(), native_socket1); |
7c673cae FG |
69 | |
70 | // basic_io_object functions. | |
71 | ||
b32b8144 FG |
72 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
73 | io_context& ioc_ref = socket1.get_io_context(); | |
74 | (void)ioc_ref; | |
75 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
76 | ||
77 | dp::socket::executor_type ex = socket1.get_executor(); | |
78 | (void)ex; | |
7c673cae FG |
79 | |
80 | // basic_socket functions. | |
81 | ||
82 | dp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer(); | |
83 | (void)lowest_layer; | |
84 | ||
85 | socket1.open(dp()); | |
86 | socket1.open(dp(), ec); | |
87 | ||
88 | int native_socket2 = ::socket(AF_UNIX, SOCK_DGRAM, 0); | |
89 | socket1.assign(dp(), native_socket2); | |
90 | int native_socket3 = ::socket(AF_UNIX, SOCK_DGRAM, 0); | |
91 | socket1.assign(dp(), native_socket3, ec); | |
92 | ||
93 | bool is_open = socket1.is_open(); | |
94 | (void)is_open; | |
95 | ||
96 | socket1.close(); | |
97 | socket1.close(ec); | |
98 | ||
b32b8144 | 99 | dp::socket::native_handle_type native_socket4 = socket1.native_handle(); |
7c673cae FG |
100 | (void)native_socket4; |
101 | ||
102 | socket1.cancel(); | |
103 | socket1.cancel(ec); | |
104 | ||
105 | bool at_mark1 = socket1.at_mark(); | |
106 | (void)at_mark1; | |
107 | bool at_mark2 = socket1.at_mark(ec); | |
108 | (void)at_mark2; | |
109 | ||
110 | std::size_t available1 = socket1.available(); | |
111 | (void)available1; | |
112 | std::size_t available2 = socket1.available(ec); | |
113 | (void)available2; | |
114 | ||
115 | socket1.bind(dp::endpoint("")); | |
116 | socket1.bind(dp::endpoint(""), ec); | |
117 | ||
118 | socket1.connect(dp::endpoint("")); | |
119 | socket1.connect(dp::endpoint(""), ec); | |
120 | ||
121 | socket1.async_connect(dp::endpoint(""), connect_handler); | |
122 | ||
123 | socket1.set_option(socket_option); | |
124 | socket1.set_option(socket_option, ec); | |
125 | ||
126 | socket1.get_option(socket_option); | |
127 | socket1.get_option(socket_option, ec); | |
128 | ||
129 | socket1.io_control(io_control_command); | |
130 | socket1.io_control(io_control_command, ec); | |
131 | ||
132 | dp::endpoint endpoint1 = socket1.local_endpoint(); | |
133 | dp::endpoint endpoint2 = socket1.local_endpoint(ec); | |
134 | ||
135 | dp::endpoint endpoint3 = socket1.remote_endpoint(); | |
136 | dp::endpoint endpoint4 = socket1.remote_endpoint(ec); | |
137 | ||
138 | socket1.shutdown(socket_base::shutdown_both); | |
139 | socket1.shutdown(socket_base::shutdown_both, ec); | |
140 | ||
141 | // basic_datagram_socket functions. | |
142 | ||
143 | socket1.send(buffer(mutable_char_buffer)); | |
144 | socket1.send(buffer(const_char_buffer)); | |
145 | socket1.send(null_buffers()); | |
146 | socket1.send(buffer(mutable_char_buffer), in_flags); | |
147 | socket1.send(buffer(const_char_buffer), in_flags); | |
148 | socket1.send(null_buffers(), in_flags); | |
149 | socket1.send(buffer(mutable_char_buffer), in_flags, ec); | |
150 | socket1.send(buffer(const_char_buffer), in_flags, ec); | |
151 | socket1.send(null_buffers(), in_flags, ec); | |
152 | ||
153 | socket1.async_send(buffer(mutable_char_buffer), send_handler); | |
154 | socket1.async_send(buffer(const_char_buffer), send_handler); | |
155 | socket1.async_send(null_buffers(), send_handler); | |
156 | socket1.async_send(buffer(mutable_char_buffer), in_flags, send_handler); | |
157 | socket1.async_send(buffer(const_char_buffer), in_flags, send_handler); | |
158 | socket1.async_send(null_buffers(), in_flags, send_handler); | |
159 | ||
160 | socket1.send_to(buffer(mutable_char_buffer), | |
161 | dp::endpoint("")); | |
162 | socket1.send_to(buffer(const_char_buffer), | |
163 | dp::endpoint("")); | |
164 | socket1.send_to(null_buffers(), | |
165 | dp::endpoint("")); | |
166 | socket1.send_to(buffer(mutable_char_buffer), | |
167 | dp::endpoint(""), in_flags); | |
168 | socket1.send_to(buffer(const_char_buffer), | |
169 | dp::endpoint(""), in_flags); | |
170 | socket1.send_to(null_buffers(), | |
171 | dp::endpoint(""), in_flags); | |
172 | socket1.send_to(buffer(mutable_char_buffer), | |
173 | dp::endpoint(""), in_flags, ec); | |
174 | socket1.send_to(buffer(const_char_buffer), | |
175 | dp::endpoint(""), in_flags, ec); | |
176 | socket1.send_to(null_buffers(), | |
177 | dp::endpoint(""), in_flags, ec); | |
178 | ||
179 | socket1.async_send_to(buffer(mutable_char_buffer), | |
180 | dp::endpoint(""), send_handler); | |
181 | socket1.async_send_to(buffer(const_char_buffer), | |
182 | dp::endpoint(""), send_handler); | |
183 | socket1.async_send_to(null_buffers(), | |
184 | dp::endpoint(""), send_handler); | |
185 | socket1.async_send_to(buffer(mutable_char_buffer), | |
186 | dp::endpoint(""), in_flags, send_handler); | |
187 | socket1.async_send_to(buffer(const_char_buffer), | |
188 | dp::endpoint(""), in_flags, send_handler); | |
189 | socket1.async_send_to(null_buffers(), | |
190 | dp::endpoint(""), in_flags, send_handler); | |
191 | ||
192 | socket1.receive(buffer(mutable_char_buffer)); | |
193 | socket1.receive(null_buffers()); | |
194 | socket1.receive(buffer(mutable_char_buffer), in_flags); | |
195 | socket1.receive(null_buffers(), in_flags); | |
196 | socket1.receive(buffer(mutable_char_buffer), in_flags, ec); | |
197 | socket1.receive(null_buffers(), in_flags, ec); | |
198 | ||
199 | socket1.async_receive(buffer(mutable_char_buffer), receive_handler); | |
200 | socket1.async_receive(null_buffers(), receive_handler); | |
201 | socket1.async_receive(buffer(mutable_char_buffer), in_flags, | |
202 | receive_handler); | |
203 | socket1.async_receive(null_buffers(), in_flags, receive_handler); | |
204 | ||
205 | dp::endpoint endpoint; | |
206 | socket1.receive_from(buffer(mutable_char_buffer), endpoint); | |
207 | socket1.receive_from(null_buffers(), endpoint); | |
208 | socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags); | |
209 | socket1.receive_from(null_buffers(), endpoint, in_flags); | |
210 | socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags, ec); | |
211 | socket1.receive_from(null_buffers(), endpoint, in_flags, ec); | |
212 | ||
213 | socket1.async_receive_from(buffer(mutable_char_buffer), | |
214 | endpoint, receive_handler); | |
215 | socket1.async_receive_from(null_buffers(), | |
216 | endpoint, receive_handler); | |
217 | socket1.async_receive_from(buffer(mutable_char_buffer), | |
218 | endpoint, in_flags, receive_handler); | |
219 | socket1.async_receive_from(null_buffers(), | |
220 | endpoint, in_flags, receive_handler); | |
221 | } | |
222 | catch (std::exception&) | |
223 | { | |
224 | } | |
225 | #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS) | |
226 | } | |
227 | ||
228 | } // namespace local_datagram_protocol_socket_compile | |
229 | ||
230 | //------------------------------------------------------------------------------ | |
231 | ||
232 | BOOST_ASIO_TEST_SUITE | |
233 | ( | |
234 | "local/datagram_protocol", | |
235 | BOOST_ASIO_TEST_CASE(local_datagram_protocol_socket_compile::test) | |
236 | ) |