20 Socket algorithms [socket.algo]

20.1 Synchronous connect operations [socket.algo.connect]

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);

Returns: connect(s, endpoints, [](auto, auto){ return true; }, 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);

Effects: Performs ec.clear(), then finds the first element ep in the sequence endpoints for which:

  • c(ec, ep) yields true;

  • s.close(ec) succeeds;

  • s.open(ep.protocol(), ec) succeeds; and

  • s.connect(ep, ec) succeeds.

Returns: typename Protocol::endpoint() if no such element is found, otherwise ep.

Error conditions:

  • socket_errc::not_found — if endpoints.empty() or if the function object c returned false for all elements in the sequence.

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);

Returns: connect(s, first, last, [](auto, auto){ return true; }, 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);

Effects: Performs ec.clear(), then finds the first iterator i in the range [first, last) for which:

  • c(ec, *i) yields true;

  • s.close(ec) succeeds;

  • s.open(typename Protocol::endpoint(*i).protocol(), ec) succeeds; and

  • s.connect(*i, ec) succeeds.

Returns: last if no such iterator is found, otherwise i.

Error conditions:

  • socket_errc::not_found — if first == last or if the function object c returned false for all iterators in the range.