namespace std { namespace experimental { namespace net { inline namespace v1 { enum class socket_errc { already_open = an implementation-defined non-zero value, not_found = an implementation-defined non-zero value }; const error_category& socket_category() noexcept; error_code make_error_code(socket_errc e) noexcept; error_condition make_error_condition(socket_errc e) noexcept; // Sockets: class socket_base; template<class Protocol> class basic_socket; template<class Protocol> class basic_datagram_socket; template<class Protocol> class basic_stream_socket; template<class Protocol> class basic_socket_acceptor; // [socket.iostreams], Socket streams: template<class Protocol, class Clock = chrono::steady_clock, class WaitTraits = wait_traits<Clock>> class basic_socket_streambuf; template<class Protocol, class Clock = chrono::steady_clock, class WaitTraits = wait_traits<Clock>> class basic_socket_iostream; // [socket.algo.connect], synchronous connect operations: template<class Protocol, class EndpointSequence> typename Protocol::endpoint connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints); template<class Protocol, class EndpointSequence> typename Protocol::endpoint connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints, error_code& ec); template<class Protocol, class EndpointSequence, class ConnectCondition> typename Protocol::endpoint connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints, ConnectCondition c); template<class Protocol, class EndpointSequence, class ConnectCondition> typename Protocol::endpoint connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints, ConnectCondition c, error_code& ec); template<class Protocol, class InputIterator> InputIterator connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last); template<class Protocol, class InputIterator> InputIterator connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last, error_code& ec); template<class Protocol, class InputIterator, class ConnectCondition> InputIterator connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last, ConnectCondition c); template<class Protocol, class InputIterator, class ConnectCondition> InputIterator connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last, ConnectCondition c, error_code& ec); // [socket.algo.async.connect], asynchronous connect operations: template<class Protocol, class EndpointSequence, class CompletionToken> DEDUCED async_connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints, CompletionToken&& token); template<class Protocol, class EndpointSequence, class ConnectCondition, class CompletionToken> DEDUCED async_connect(basic_socket<Protocol>& s, const EndpointSequence& endpoints, ConnectCondition c, CompletionToken&& token); template<class Protocol, class InputIterator, class CompletionToken> DEDUCED async_connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last, CompletionToken&& token); template<class Protocol, class InputIterator, class ConnectCondition, class CompletionToken> DEDUCED async_connect(basic_socket<Protocol>& s, InputIterator first, InputIterator last, ConnectCondition c, CompletionToken&& token); } // inline namespace v1 } // namespace net } // namespace experimental template<> struct is_error_code_enum<experimental::net::v1::socket_errc> : public true_type {}; } // namespace std
The figure below illustrates relationships between various types described in this document. A solid line from A to B that is terminated by an open arrow indicates that A is derived from B. A solid line from A to B that starts with a diamond and is terminated by a solid arrow indicates that A contains an object of type B. A dotted line from A to B indicates that A is a synonym for the class template B with the specified template argument.