gpt4 book ai didi

c++ - TCP 套接字是否可以注意到网络中断的异常?

转载 作者:可可西里 更新时间:2023-11-01 02:44:52 24 4
gpt4 key购买 nike

我在 Linux 上通过套接字与服务器建立了一个 tcp 链接。并且我使用select()函数来监控是否有数据,如果有,我使用recv获取数据。

现在我想知道网络是否坏了(比如电缆被拔掉了)。但是即使我监视异常也无法获取异常。

FD_SET( m_socket, &except_fds );

int result = select( m_socket + 1, &fds, 0, &except_fds, timeout == -1 ? 0 : &tv );

让我感到困惑的是android上有类似的实现(java.net.socket),如果我将手机设置为飞行模式,我可以立即捕获异常。

select() 实现平台是否特定?

总之,是否可以用这种方法监测网络断线?如果没有,有什么解决办法吗?

最佳答案

TCP 协议(protocol)通常的工作方式,错误是数据无法传输(不是ACK'd)。除非数据传输失败,否则没有错误。

因此,您可以使用 setsockopt SO_KEEPALIVE 定期发送小数据包来检测丢失的连接,或者定义一个简单的心跳协议(protocol)。您还可以使用 TCP_KEEPCNTTCP_KEEPIDLETCP_KEEPINTVL 覆盖 keepalive 默认值。

关于c++ - TCP 套接字是否可以注意到网络中断的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com