On 27/09/2017 19:03, Richard Hodges wrote:
As boost::asio::connect() closes an open socket passed to it before making the remote connection, it's not possible to pass connect() a prebaked socket.
I think the class template you're looking for is basic_raw_socket<>.
http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/reference/basic_raw...
No, basic_raw_socket is for raw sockets, ie. non TCP/IP ones. Normally you'd use asio::ip::tcp::socket or asio::ip::udp::socket. They contain connect() methods which will connect to a single endpoint and will preserve a prior bind() call. If all you want is to connect to a single endpoint, then just s.bind()/s.connect() directly. Only the free function asio::connect() supports multiple endpoints and does the close()/connect() loop. If you want to support multiple endpoints and also bind, then you'll need to write your own close()/bind()/connect() loop similar to that. (There are also corresponding async_connect() methods, which should be preferred unless you really want to block the thread.)