使用boost :: asio :: tcp,当套接字连接断开时如何获得通知

时间:2019-11-01 10:05:06

标签: sockets tcp boost-asio keep-alive

场景:
我在通过网络连接的2个对等方之间使用boost::asio::tcp协议。我的代码可在Linux,macOS和iOS上运行。

我在两端都实现了看门狗乒乓机制,以检查对等体之间的套接字连接是否正常。这是通过每2秒发送一个虚拟数据包来完成的,我认为这是一种已知方法。

挑战:
但是,有什么办法可以避免自己写这个看门狗? 有没有一种方法可以使asio / TCP堆栈本身为我执行此操作,并在套接字连接不正常时立即触发事件?我一直试图了解TCP堆栈中的kepp_alive功能,因为它似乎可以回答我的问题?

但是,再次看来,我可以调整keep_alive参数,但是boost::asio::tcp似乎没有给我API来执行此操作。

问题:
调整keep_alive参数是否可以帮助我实现目标?我的目标是当由于对端的任何更奇怪的原因而不再连接套接字时,从asio或TCP堆栈中获取通知。请注意,对等节点可能会以奇怪的方式崩溃,例如内核崩溃或真正疯狂的事情。

仅设置socket.set_option(boost::asio::socket_base::keep_alive(true));似乎无济于事。在Linux上运行的默认时间太长。在同伴发生故障后的几分钟后,我仍然收到通知。

0 个答案:

没有答案
相关问题