1//
2// datagram_protocol.cpp
3// ~~~~~~~~~~~~~~~~~~~~~
4//
5// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
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>
20#include <boost/asio/io_service.hpp>
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
31namespace local_datagram_protocol_socket_compile {
32
33void connect_handler(const boost::system::error_code&)
34{
35}
36
37void send_handler(const boost::system::error_code&, std::size_t)
38{
39}
40
41void receive_handler(const boost::system::error_code&, std::size_t)
42{
43}
44
45void 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 {
54 io_service ios;
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
64 dp::socket socket1(ios);
65 dp::socket socket2(ios, dp());
66 dp::socket socket3(ios, dp::endpoint(""));
67 int native_socket1 = ::socket(AF_UNIX, SOCK_DGRAM, protocol: 0);
68 dp::socket socket4(ios, dp(), native_socket1);
69
70 // basic_io_object functions.
71
72 io_service& ios_ref = socket1.get_io_service();
73 (void)ios_ref;
74
75 // basic_socket functions.
76
77 dp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
78 (void)lowest_layer;
79
80 socket1.open(protocol: dp());
81 socket1.open(protocol: dp(), ec);
82
83 int native_socket2 = ::socket(AF_UNIX, SOCK_DGRAM, protocol: 0);
84 socket1.assign(protocol: dp(), native_socket: native_socket2);
85 int native_socket3 = ::socket(AF_UNIX, SOCK_DGRAM, protocol: 0);
86 socket1.assign(protocol: dp(), native_socket: native_socket3, ec);
87
88 bool is_open = socket1.is_open();
89 (void)is_open;
90
91 socket1.close();
92 socket1.close(ec);
93
94 dp::socket::native_type native_socket4 = socket1.native();
95 (void)native_socket4;
96
97 socket1.cancel();
98 socket1.cancel(ec);
99
100 bool at_mark1 = socket1.at_mark();
101 (void)at_mark1;
102 bool at_mark2 = socket1.at_mark(ec);
103 (void)at_mark2;
104
105 std::size_t available1 = socket1.available();
106 (void)available1;
107 std::size_t available2 = socket1.available(ec);
108 (void)available2;
109
110 socket1.bind(endpoint: dp::endpoint(""));
111 socket1.bind(endpoint: dp::endpoint(""), ec);
112
113 socket1.connect(peer_endpoint: dp::endpoint(""));
114 socket1.connect(peer_endpoint: dp::endpoint(""), ec);
115
116 socket1.async_connect(peer_endpoint: dp::endpoint(""), handler&: connect_handler);
117
118 socket1.set_option(socket_option);
119 socket1.set_option(option: socket_option, ec);
120
121 socket1.get_option(option&: socket_option);
122 socket1.get_option(option&: socket_option, ec);
123
124 socket1.io_control(command&: io_control_command);
125 socket1.io_control(command&: io_control_command, ec);
126
127 dp::endpoint endpoint1 = socket1.local_endpoint();
128 dp::endpoint endpoint2 = socket1.local_endpoint(ec);
129
130 dp::endpoint endpoint3 = socket1.remote_endpoint();
131 dp::endpoint endpoint4 = socket1.remote_endpoint(ec);
132
133 socket1.shutdown(what: socket_base::shutdown_both);
134 socket1.shutdown(what: socket_base::shutdown_both, ec);
135
136 // basic_datagram_socket functions.
137
138 socket1.send(buffers: buffer(data&: mutable_char_buffer));
139 socket1.send(buffers: buffer(data: const_char_buffer));
140 socket1.send(buffers: null_buffers());
141 socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags);
142 socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags);
143 socket1.send(buffers: null_buffers(), flags: in_flags);
144 socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec);
145 socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags, ec);
146 socket1.send(buffers: null_buffers(), flags: in_flags, ec);
147
148 socket1.async_send(buffers: buffer(data&: mutable_char_buffer), handler&: send_handler);
149 socket1.async_send(buffers: buffer(data: const_char_buffer), handler&: send_handler);
150 socket1.async_send(buffers: null_buffers(), handler&: send_handler);
151 socket1.async_send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, handler&: send_handler);
152 socket1.async_send(buffers: buffer(data: const_char_buffer), flags: in_flags, handler&: send_handler);
153 socket1.async_send(buffers: null_buffers(), flags: in_flags, handler&: send_handler);
154
155 socket1.send_to(buffers: buffer(data&: mutable_char_buffer),
156 destination: dp::endpoint(""));
157 socket1.send_to(buffers: buffer(data: const_char_buffer),
158 destination: dp::endpoint(""));
159 socket1.send_to(buffers: null_buffers(),
160 destination: dp::endpoint(""));
161 socket1.send_to(buffers: buffer(data&: mutable_char_buffer),
162 destination: dp::endpoint(""), flags: in_flags);
163 socket1.send_to(buffers: buffer(data: const_char_buffer),
164 destination: dp::endpoint(""), flags: in_flags);
165 socket1.send_to(buffers: null_buffers(),
166 destination: dp::endpoint(""), flags: in_flags);
167 socket1.send_to(buffers: buffer(data&: mutable_char_buffer),
168 destination: dp::endpoint(""), flags: in_flags, ec);
169 socket1.send_to(buffers: buffer(data: const_char_buffer),
170 destination: dp::endpoint(""), flags: in_flags, ec);
171 socket1.send_to(buffers: null_buffers(),
172 destination: dp::endpoint(""), flags: in_flags, ec);
173
174 socket1.async_send_to(buffers: buffer(data&: mutable_char_buffer),
175 destination: dp::endpoint(""), handler&: send_handler);
176 socket1.async_send_to(buffers: buffer(data: const_char_buffer),
177 destination: dp::endpoint(""), handler&: send_handler);
178 socket1.async_send_to(buffers: null_buffers(),
179 destination: dp::endpoint(""), handler&: send_handler);
180 socket1.async_send_to(buffers: buffer(data&: mutable_char_buffer),
181 destination: dp::endpoint(""), flags: in_flags, handler&: send_handler);
182 socket1.async_send_to(buffers: buffer(data: const_char_buffer),
183 destination: dp::endpoint(""), flags: in_flags, handler&: send_handler);
184 socket1.async_send_to(buffers: null_buffers(),
185 destination: dp::endpoint(""), flags: in_flags, handler&: send_handler);
186
187 socket1.receive(buffers: buffer(data&: mutable_char_buffer));
188 socket1.receive(buffers: null_buffers());
189 socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags);
190 socket1.receive(buffers: null_buffers(), flags: in_flags);
191 socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec);
192 socket1.receive(buffers: null_buffers(), flags: in_flags, ec);
193
194 socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), handler&: receive_handler);
195 socket1.async_receive(buffers: null_buffers(), handler&: receive_handler);
196 socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags,
197 handler&: receive_handler);
198 socket1.async_receive(buffers: null_buffers(), flags: in_flags, handler&: receive_handler);
199
200 dp::endpoint endpoint;
201 socket1.receive_from(buffers: buffer(data&: mutable_char_buffer), sender_endpoint&: endpoint);
202 socket1.receive_from(buffers: null_buffers(), sender_endpoint&: endpoint);
203 socket1.receive_from(buffers: buffer(data&: mutable_char_buffer), sender_endpoint&: endpoint, flags: in_flags);
204 socket1.receive_from(buffers: null_buffers(), sender_endpoint&: endpoint, flags: in_flags);
205 socket1.receive_from(buffers: buffer(data&: mutable_char_buffer), sender_endpoint&: endpoint, flags: in_flags, ec);
206 socket1.receive_from(buffers: null_buffers(), sender_endpoint&: endpoint, flags: in_flags, ec);
207
208 socket1.async_receive_from(buffers: buffer(data&: mutable_char_buffer),
209 sender_endpoint&: endpoint, handler&: receive_handler);
210 socket1.async_receive_from(buffers: null_buffers(),
211 sender_endpoint&: endpoint, handler&: receive_handler);
212 socket1.async_receive_from(buffers: buffer(data&: mutable_char_buffer),
213 sender_endpoint&: endpoint, flags: in_flags, handler&: receive_handler);
214 socket1.async_receive_from(buffers: null_buffers(),
215 sender_endpoint&: endpoint, flags: in_flags, handler&: receive_handler);
216 }
217 catch (std::exception&)
218 {
219 }
220#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
221}
222
223} // namespace local_datagram_protocol_socket_compile
224
225//------------------------------------------------------------------------------
226
227BOOST_ASIO_TEST_SUITE
228(
229 "local/datagram_protocol",
230 BOOST_ASIO_TEST_CASE(local_datagram_protocol_socket_compile::test)
231)
232

source code of boost/libs/asio/test/local/datagram_protocol.cpp