我想解决当tcpip断开连接时recv函数没有返回0的问题

时间:2017-11-03 08:31:15

标签: tcp-ip recv

当tcpip在物理上断开时,是否存在recv函数不返回0的情况?没有调用返回0.因此,Tcpip没有关闭。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

仅当远程端明确关闭TCP连接时,Recv才返回0。

另一种脱离的情况:

  • 如果TCP连接被明确破坏(收到TCP RST或ICMP无法访问的数据包),则从套接字读取时可能会出错。
  • 如果传输网络中断或远程主机消失,则:
    • 如果显式指定了超时,则读取等待并返回超时错误
    • 如果未指定超时,则读取等待最大超时(取决于Linux的系统大约2小时)

在最后一种情况下,您可以:

  • 尝试在套接字上启用keepalive请求(SO_KEEPALIVE套接字选项)
  • 在应用层自行保持活跃:
    • 向同伴发送内容并期待从中获得答案
    • 如果超时内没有收到 - 关闭连接