]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // ip/tcp.hpp | |
3 | // ~~~~~~~~~~ | |
4 | // | |
5 | // Copyright (c) 2003-2016 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 | #ifndef BOOST_ASIO_IP_TCP_HPP | |
12 | #define BOOST_ASIO_IP_TCP_HPP | |
13 | ||
14 | #if defined(_MSC_VER) && (_MSC_VER >= 1200) | |
15 | # pragma once | |
16 | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) | |
17 | ||
18 | #include <boost/asio/detail/config.hpp> | |
19 | #include <boost/asio/basic_socket_acceptor.hpp> | |
20 | #include <boost/asio/basic_socket_iostream.hpp> | |
21 | #include <boost/asio/basic_stream_socket.hpp> | |
22 | #include <boost/asio/detail/socket_option.hpp> | |
23 | #include <boost/asio/detail/socket_types.hpp> | |
24 | #include <boost/asio/ip/basic_endpoint.hpp> | |
25 | #include <boost/asio/ip/basic_resolver.hpp> | |
26 | #include <boost/asio/ip/basic_resolver_iterator.hpp> | |
27 | #include <boost/asio/ip/basic_resolver_query.hpp> | |
28 | ||
29 | #include <boost/asio/detail/push_options.hpp> | |
30 | ||
31 | namespace boost { | |
32 | namespace asio { | |
33 | namespace ip { | |
34 | ||
35 | /// Encapsulates the flags needed for TCP. | |
36 | /** | |
37 | * The boost::asio::ip::tcp class contains flags necessary for TCP sockets. | |
38 | * | |
39 | * @par Thread Safety | |
40 | * @e Distinct @e objects: Safe.@n | |
41 | * @e Shared @e objects: Safe. | |
42 | * | |
43 | * @par Concepts: | |
44 | * Protocol, InternetProtocol. | |
45 | */ | |
46 | class tcp | |
47 | { | |
48 | public: | |
49 | /// The type of a TCP endpoint. | |
50 | typedef basic_endpoint<tcp> endpoint; | |
51 | ||
52 | /// Construct to represent the IPv4 TCP protocol. | |
53 | static tcp v4() | |
54 | { | |
55 | return tcp(BOOST_ASIO_OS_DEF(AF_INET)); | |
56 | } | |
57 | ||
58 | /// Construct to represent the IPv6 TCP protocol. | |
59 | static tcp v6() | |
60 | { | |
61 | return tcp(BOOST_ASIO_OS_DEF(AF_INET6)); | |
62 | } | |
63 | ||
64 | /// Obtain an identifier for the type of the protocol. | |
65 | int type() const | |
66 | { | |
67 | return BOOST_ASIO_OS_DEF(SOCK_STREAM); | |
68 | } | |
69 | ||
70 | /// Obtain an identifier for the protocol. | |
71 | int protocol() const | |
72 | { | |
73 | return BOOST_ASIO_OS_DEF(IPPROTO_TCP); | |
74 | } | |
75 | ||
76 | /// Obtain an identifier for the protocol family. | |
77 | int family() const | |
78 | { | |
79 | return family_; | |
80 | } | |
81 | ||
82 | /// The TCP socket type. | |
83 | typedef basic_stream_socket<tcp> socket; | |
84 | ||
85 | /// The TCP acceptor type. | |
86 | typedef basic_socket_acceptor<tcp> acceptor; | |
87 | ||
88 | /// The TCP resolver type. | |
89 | typedef basic_resolver<tcp> resolver; | |
90 | ||
91 | #if !defined(BOOST_ASIO_NO_IOSTREAM) | |
92 | /// The TCP iostream type. | |
93 | typedef basic_socket_iostream<tcp> iostream; | |
94 | #endif // !defined(BOOST_ASIO_NO_IOSTREAM) | |
95 | ||
96 | /// Socket option for disabling the Nagle algorithm. | |
97 | /** | |
98 | * Implements the IPPROTO_TCP/TCP_NODELAY socket option. | |
99 | * | |
100 | * @par Examples | |
101 | * Setting the option: | |
102 | * @code | |
103 | * boost::asio::ip::tcp::socket socket(io_service); | |
104 | * ... | |
105 | * boost::asio::ip::tcp::no_delay option(true); | |
106 | * socket.set_option(option); | |
107 | * @endcode | |
108 | * | |
109 | * @par | |
110 | * Getting the current option value: | |
111 | * @code | |
112 | * boost::asio::ip::tcp::socket socket(io_service); | |
113 | * ... | |
114 | * boost::asio::ip::tcp::no_delay option; | |
115 | * socket.get_option(option); | |
116 | * bool is_set = option.value(); | |
117 | * @endcode | |
118 | * | |
119 | * @par Concepts: | |
120 | * Socket_Option, Boolean_Socket_Option. | |
121 | */ | |
122 | #if defined(GENERATING_DOCUMENTATION) | |
123 | typedef implementation_defined no_delay; | |
124 | #else | |
125 | typedef boost::asio::detail::socket_option::boolean< | |
126 | BOOST_ASIO_OS_DEF(IPPROTO_TCP), BOOST_ASIO_OS_DEF(TCP_NODELAY)> no_delay; | |
127 | #endif | |
128 | ||
129 | /// Compare two protocols for equality. | |
130 | friend bool operator==(const tcp& p1, const tcp& p2) | |
131 | { | |
132 | return p1.family_ == p2.family_; | |
133 | } | |
134 | ||
135 | /// Compare two protocols for inequality. | |
136 | friend bool operator!=(const tcp& p1, const tcp& p2) | |
137 | { | |
138 | return p1.family_ != p2.family_; | |
139 | } | |
140 | ||
141 | private: | |
142 | // Construct with a specific family. | |
143 | explicit tcp(int protocol_family) | |
144 | : family_(protocol_family) | |
145 | { | |
146 | } | |
147 | ||
148 | int family_; | |
149 | }; | |
150 | ||
151 | } // namespace ip | |
152 | } // namespace asio | |
153 | } // namespace boost | |
154 | ||
155 | #include <boost/asio/detail/pop_options.hpp> | |
156 | ||
157 | #endif // BOOST_ASIO_IP_TCP_HPP |