Thanks Niall, I tried adding this to the code: [code] boost::asio::socket_base::keep_alive ka_option(true); socket.lowest_layer().set_option(ka_option); [/code] and now it sometimes can come out of the read with an exception raised, which is good, but this happens only once in a while. I haven't tried other ways yet such as what Richard Hodges suggested, as I need to delve deeper into that, and Boost or linux is new to me. On Sat, Feb 20, 2021 at 12:58 AM Niall Douglas via Boost-users < boost-users@lists.boost.org> wrote:
On 19/02/2021 17:19, Richard Hodges via Boost-users wrote:
The TCP/IP protocol was designed to work over unreliable networks, including sections that hop over radio links and dial-up telephone lines.
In a nutshell, the way the internet works is that packets are transmitted and it is assumed that they may or may not arrive at some time in the future. There are timeouts built in, but they are longer than you would probably want, on account of all the unreliable dial-ups between you and the other peer.
Therefore, to involve a timeout you need to run a timer in parallel with the send/receive operation and cancel the operation if the timeout occurs before the operation has completed.
It probably would be easier to set SO_KEEPALIVE on the socket, then it will close as soon as the physical connection disappears. This works for any kind of socket, no timeouts needed.
Niall _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users