Chris@16: // Chris@16: // ip/tcp.hpp Chris@16: // ~~~~~~~~~~ Chris@16: // Chris@101: // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: Chris@16: #ifndef BOOST_ASIO_IP_TCP_HPP Chris@16: #define BOOST_ASIO_IP_TCP_HPP Chris@16: Chris@16: #if defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: # pragma once Chris@16: #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace asio { Chris@16: namespace ip { Chris@16: Chris@16: /// Encapsulates the flags needed for TCP. Chris@16: /** Chris@16: * The boost::asio::ip::tcp class contains flags necessary for TCP sockets. Chris@16: * Chris@16: * @par Thread Safety Chris@16: * @e Distinct @e objects: Safe.@n Chris@16: * @e Shared @e objects: Safe. Chris@16: * Chris@16: * @par Concepts: Chris@16: * Protocol, InternetProtocol. Chris@16: */ Chris@16: class tcp Chris@16: { Chris@16: public: Chris@16: /// The type of a TCP endpoint. Chris@16: typedef basic_endpoint endpoint; Chris@16: Chris@16: /// Construct to represent the IPv4 TCP protocol. Chris@16: static tcp v4() Chris@16: { Chris@16: return tcp(BOOST_ASIO_OS_DEF(AF_INET)); Chris@16: } Chris@16: Chris@16: /// Construct to represent the IPv6 TCP protocol. Chris@16: static tcp v6() Chris@16: { Chris@16: return tcp(BOOST_ASIO_OS_DEF(AF_INET6)); Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the type of the protocol. Chris@16: int type() const Chris@16: { Chris@16: return BOOST_ASIO_OS_DEF(SOCK_STREAM); Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the protocol. Chris@16: int protocol() const Chris@16: { Chris@16: return BOOST_ASIO_OS_DEF(IPPROTO_TCP); Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the protocol family. Chris@16: int family() const Chris@16: { Chris@16: return family_; Chris@16: } Chris@16: Chris@16: /// The TCP socket type. Chris@16: typedef basic_stream_socket socket; Chris@16: Chris@16: /// The TCP acceptor type. Chris@16: typedef basic_socket_acceptor acceptor; Chris@16: Chris@16: /// The TCP resolver type. Chris@16: typedef basic_resolver resolver; Chris@16: Chris@16: #if !defined(BOOST_ASIO_NO_IOSTREAM) Chris@16: /// The TCP iostream type. Chris@16: typedef basic_socket_iostream iostream; Chris@16: #endif // !defined(BOOST_ASIO_NO_IOSTREAM) Chris@16: Chris@16: /// Socket option for disabling the Nagle algorithm. Chris@16: /** Chris@16: * Implements the IPPROTO_TCP/TCP_NODELAY socket option. Chris@16: * Chris@16: * @par Examples Chris@16: * Setting the option: Chris@16: * @code Chris@16: * boost::asio::ip::tcp::socket socket(io_service); Chris@16: * ... Chris@16: * boost::asio::ip::tcp::no_delay option(true); Chris@16: * socket.set_option(option); Chris@16: * @endcode Chris@16: * Chris@16: * @par Chris@16: * Getting the current option value: Chris@16: * @code Chris@16: * boost::asio::ip::tcp::socket socket(io_service); Chris@16: * ... Chris@16: * boost::asio::ip::tcp::no_delay option; Chris@16: * socket.get_option(option); Chris@16: * bool is_set = option.value(); Chris@16: * @endcode Chris@16: * Chris@16: * @par Concepts: Chris@16: * Socket_Option, Boolean_Socket_Option. Chris@16: */ Chris@16: #if defined(GENERATING_DOCUMENTATION) Chris@16: typedef implementation_defined no_delay; Chris@16: #else Chris@16: typedef boost::asio::detail::socket_option::boolean< Chris@16: BOOST_ASIO_OS_DEF(IPPROTO_TCP), BOOST_ASIO_OS_DEF(TCP_NODELAY)> no_delay; Chris@16: #endif Chris@16: Chris@16: /// Compare two protocols for equality. Chris@16: friend bool operator==(const tcp& p1, const tcp& p2) Chris@16: { Chris@16: return p1.family_ == p2.family_; Chris@16: } Chris@16: Chris@16: /// Compare two protocols for inequality. Chris@16: friend bool operator!=(const tcp& p1, const tcp& p2) Chris@16: { Chris@16: return p1.family_ != p2.family_; Chris@16: } Chris@16: Chris@16: private: Chris@16: // Construct with a specific family. Chris@16: explicit tcp(int protocol_family) Chris@16: : family_(protocol_family) Chris@16: { Chris@16: } Chris@16: Chris@16: int family_; Chris@16: }; Chris@16: Chris@16: } // namespace ip Chris@16: } // namespace asio Chris@16: } // namespace boost Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_ASIO_IP_TCP_HPP