1 | // |
2 | // generic/stream_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/generic/stream_protocol.hpp> |
18 | |
19 | #include <cstring> |
20 | #include <boost/asio/io_service.hpp> |
21 | #include <boost/asio/ip/tcp.hpp> |
22 | #include "../unit_test.hpp" |
23 | |
24 | #if defined(__cplusplus_cli) || defined(__cplusplus_winrt) |
25 | # define generic cpp_generic |
26 | #endif |
27 | |
28 | //------------------------------------------------------------------------------ |
29 | |
30 | // generic_stream_protocol_socket_compile test |
31 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
32 | // The following test checks that all public member functions on the class |
33 | // generic::stream_protocol::socket compile and link correctly. Runtime |
34 | // failures are ignored. |
35 | |
36 | namespace generic_stream_protocol_socket_compile { |
37 | |
38 | void connect_handler(const boost::system::error_code&) |
39 | { |
40 | } |
41 | |
42 | void send_handler(const boost::system::error_code&, std::size_t) |
43 | { |
44 | } |
45 | |
46 | void receive_handler(const boost::system::error_code&, std::size_t) |
47 | { |
48 | } |
49 | |
50 | void write_some_handler(const boost::system::error_code&, std::size_t) |
51 | { |
52 | } |
53 | |
54 | void read_some_handler(const boost::system::error_code&, std::size_t) |
55 | { |
56 | } |
57 | |
58 | void test() |
59 | { |
60 | using namespace boost::asio; |
61 | namespace generic = boost::asio::generic; |
62 | typedef generic::stream_protocol sp; |
63 | |
64 | const int af_inet = BOOST_ASIO_OS_DEF(AF_INET); |
65 | const int ipproto_tcp = BOOST_ASIO_OS_DEF(IPPROTO_TCP); |
66 | const int sock_stream = BOOST_ASIO_OS_DEF(SOCK_STREAM); |
67 | |
68 | try |
69 | { |
70 | io_service ios; |
71 | char mutable_char_buffer[128] = "" ; |
72 | const char const_char_buffer[128] = "" ; |
73 | socket_base::message_flags in_flags = 0; |
74 | socket_base::keep_alive socket_option; |
75 | socket_base::bytes_readable io_control_command; |
76 | boost::system::error_code ec; |
77 | |
78 | // basic_stream_socket constructors. |
79 | |
80 | sp::socket socket1(ios); |
81 | sp::socket socket2(ios, sp(af_inet, ipproto_tcp)); |
82 | sp::socket socket3(ios, sp::endpoint()); |
83 | #if defined(BOOST_ASIO_WINDOWS_RUNTIME) |
84 | Windows::Networking::Sockets::StreamSocket^ native_socket1 = nullptr; |
85 | #else // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
86 | sp::socket::native_handle_type native_socket1 |
87 | = ::socket(domain: af_inet, type: sock_stream, protocol: 0); |
88 | #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
89 | sp::socket socket4(ios, sp(af_inet, ipproto_tcp), native_socket1); |
90 | |
91 | #if defined(BOOST_ASIO_HAS_MOVE) |
92 | sp::socket socket5(std::move(socket4)); |
93 | boost::asio::ip::tcp::socket tcp_socket(ios); |
94 | sp::socket socket6(std::move(tcp_socket)); |
95 | #endif // defined(BOOST_ASIO_HAS_MOVE) |
96 | |
97 | // basic_stream_socket operators. |
98 | |
99 | #if defined(BOOST_ASIO_HAS_MOVE) |
100 | socket1 = sp::socket(ios); |
101 | socket1 = std::move(socket2); |
102 | socket1 = boost::asio::ip::tcp::socket(ios); |
103 | #endif // defined(BOOST_ASIO_HAS_MOVE) |
104 | |
105 | // basic_io_object functions. |
106 | |
107 | io_service& ios_ref = socket1.get_io_service(); |
108 | (void)ios_ref; |
109 | |
110 | // basic_socket functions. |
111 | |
112 | sp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer(); |
113 | (void)lowest_layer; |
114 | |
115 | socket1.open(protocol: sp(af_inet, ipproto_tcp)); |
116 | socket1.open(protocol: sp(af_inet, ipproto_tcp), ec); |
117 | |
118 | #if defined(BOOST_ASIO_WINDOWS_RUNTIME) |
119 | Windows::Networking::Sockets::StreamSocket^ native_socket2 = nullptr; |
120 | #else // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
121 | sp::socket::native_handle_type native_socket2 |
122 | = ::socket(domain: af_inet, type: sock_stream, protocol: 0); |
123 | #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
124 | socket1.assign(protocol: sp(af_inet, ipproto_tcp), native_socket: native_socket2); |
125 | #if defined(BOOST_ASIO_WINDOWS_RUNTIME) |
126 | Windows::Networking::Sockets::StreamSocket^ native_socket3 = nullptr; |
127 | #else // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
128 | sp::socket::native_handle_type native_socket3 |
129 | = ::socket(domain: af_inet, type: sock_stream, protocol: 0); |
130 | #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME) |
131 | socket1.assign(protocol: sp(af_inet, ipproto_tcp), native_socket: native_socket3, ec); |
132 | |
133 | bool is_open = socket1.is_open(); |
134 | (void)is_open; |
135 | |
136 | socket1.close(); |
137 | socket1.close(ec); |
138 | |
139 | sp::socket::native_type native_socket4 = socket1.native(); |
140 | (void)native_socket4; |
141 | |
142 | socket1.cancel(); |
143 | socket1.cancel(ec); |
144 | |
145 | bool at_mark1 = socket1.at_mark(); |
146 | (void)at_mark1; |
147 | bool at_mark2 = socket1.at_mark(ec); |
148 | (void)at_mark2; |
149 | |
150 | std::size_t available1 = socket1.available(); |
151 | (void)available1; |
152 | std::size_t available2 = socket1.available(ec); |
153 | (void)available2; |
154 | |
155 | socket1.bind(endpoint: sp::endpoint()); |
156 | socket1.bind(endpoint: sp::endpoint(), ec); |
157 | |
158 | socket1.connect(peer_endpoint: sp::endpoint()); |
159 | socket1.connect(peer_endpoint: sp::endpoint(), ec); |
160 | |
161 | socket1.async_connect(peer_endpoint: sp::endpoint(), handler&: connect_handler); |
162 | |
163 | socket1.set_option(socket_option); |
164 | socket1.set_option(option: socket_option, ec); |
165 | |
166 | socket1.get_option(option&: socket_option); |
167 | socket1.get_option(option&: socket_option, ec); |
168 | |
169 | socket1.io_control(command&: io_control_command); |
170 | socket1.io_control(command&: io_control_command, ec); |
171 | |
172 | sp::endpoint endpoint1 = socket1.local_endpoint(); |
173 | sp::endpoint endpoint2 = socket1.local_endpoint(ec); |
174 | |
175 | sp::endpoint endpoint3 = socket1.remote_endpoint(); |
176 | sp::endpoint endpoint4 = socket1.remote_endpoint(ec); |
177 | |
178 | socket1.shutdown(what: socket_base::shutdown_both); |
179 | socket1.shutdown(what: socket_base::shutdown_both, ec); |
180 | |
181 | // basic_stream_socket functions. |
182 | |
183 | socket1.send(buffers: buffer(data&: mutable_char_buffer)); |
184 | socket1.send(buffers: buffer(data: const_char_buffer)); |
185 | socket1.send(buffers: null_buffers()); |
186 | socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags); |
187 | socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags); |
188 | socket1.send(buffers: null_buffers(), flags: in_flags); |
189 | socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec); |
190 | socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags, ec); |
191 | socket1.send(buffers: null_buffers(), flags: in_flags, ec); |
192 | |
193 | socket1.async_send(buffers: buffer(data&: mutable_char_buffer), handler&: send_handler); |
194 | socket1.async_send(buffers: buffer(data: const_char_buffer), handler&: send_handler); |
195 | socket1.async_send(buffers: null_buffers(), handler&: send_handler); |
196 | socket1.async_send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, handler&: send_handler); |
197 | socket1.async_send(buffers: buffer(data: const_char_buffer), flags: in_flags, handler&: send_handler); |
198 | socket1.async_send(buffers: null_buffers(), flags: in_flags, handler&: send_handler); |
199 | |
200 | socket1.receive(buffers: buffer(data&: mutable_char_buffer)); |
201 | socket1.receive(buffers: null_buffers()); |
202 | socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags); |
203 | socket1.receive(buffers: null_buffers(), flags: in_flags); |
204 | socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec); |
205 | socket1.receive(buffers: null_buffers(), flags: in_flags, ec); |
206 | |
207 | socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), handler&: receive_handler); |
208 | socket1.async_receive(buffers: null_buffers(), handler&: receive_handler); |
209 | socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, |
210 | handler&: receive_handler); |
211 | socket1.async_receive(buffers: null_buffers(), flags: in_flags, handler&: receive_handler); |
212 | |
213 | socket1.write_some(buffers: buffer(data&: mutable_char_buffer)); |
214 | socket1.write_some(buffers: buffer(data: const_char_buffer)); |
215 | socket1.write_some(buffers: null_buffers()); |
216 | socket1.write_some(buffers: buffer(data&: mutable_char_buffer), ec); |
217 | socket1.write_some(buffers: buffer(data: const_char_buffer), ec); |
218 | socket1.write_some(buffers: null_buffers(), ec); |
219 | |
220 | socket1.async_write_some(buffers: buffer(data&: mutable_char_buffer), handler&: write_some_handler); |
221 | socket1.async_write_some(buffers: buffer(data: const_char_buffer), handler&: write_some_handler); |
222 | socket1.async_write_some(buffers: null_buffers(), handler&: write_some_handler); |
223 | |
224 | socket1.read_some(buffers: buffer(data&: mutable_char_buffer)); |
225 | socket1.read_some(buffers: buffer(data&: mutable_char_buffer), ec); |
226 | socket1.read_some(buffers: null_buffers(), ec); |
227 | |
228 | socket1.async_read_some(buffers: buffer(data&: mutable_char_buffer), handler&: read_some_handler); |
229 | socket1.async_read_some(buffers: null_buffers(), handler&: read_some_handler); |
230 | } |
231 | catch (std::exception&) |
232 | { |
233 | } |
234 | } |
235 | |
236 | } // namespace generic_stream_protocol_socket_compile |
237 | |
238 | //------------------------------------------------------------------------------ |
239 | |
240 | BOOST_ASIO_TEST_SUITE |
241 | ( |
242 | "generic/stream_protocol" , |
243 | BOOST_ASIO_TEST_CASE(generic_stream_protocol_socket_compile::test) |
244 | ) |
245 | |