确定tcp连接状态

时间:2013-11-01 04:17:47

标签: sockets tcp state

在linux中,我如何确定TCP套接字的状态? 我在这个主题中搜索了很多,但我没有找到真正可用的解决方案。 我最追逐的是:在套接字中写入内容,如果连接关闭,它将失败。 但是如果流的内容被绑定,并且可能不会在流中写入任何垃圾呢? 另一方面,netstat可以确定套接字状态,但如果我想实现基于netstat的解决方案,它将非常昂贵。我必须将fileDescriptor解析为socketID,而不是从/ proc / net / tcp读取所有记录,找到拟合线并建立测试状态。如果必须定期调用此方法,则效率不高。 还有其他一些解决这个问题的简写方法吗?

2 个答案:

答案 0 :(得分:0)

你做不到。 TCP套接字没有动态状态;它们只有先前操作的结果。如果不操作TCP连接,则故意设计为不更改状态。它没有“拨号音”,这是它完全取代像SNA这样的网络架构的一个根本原因。

答案 1 :(得分:0)

您必须执行套接字I / O操作以确定连接是否仍处于活动状态。如果您无法写入套接字,您仍然可以尝试读取操作(只要它不会干扰任何其他读取操作),并查看它是否因连接错误而失败。