TCP链路的一端断开连接时,它将向另一端发送重置(RST)消息。我希望能够在应用程序层中收到此消息。
在我的代码中,我使用一个select()
调用来接收来自多个潜在来源的输入,包括TCP连接。我已经看到,当select()
显示连接上已准备好读取数据,然后read()
调用返回读取的0字节时,发生在通过TCP发送RST之后。(我了解与recv()
相似的作品read()
。)
是否read()
返回0字节(后select()
一个TCP连接上)只有当连接被重置?在任何其他情况下,它是否都返回0字节?
我记得前一阵子在连接的另一端使用了特定的以太网设备,并且该Linux端在接收0字节之后select()
,但不是为了复位连接,而是在进行一些数据流的过程中。我在Wireshark中确认接收到的数据包有0个数据字节。这是一个错误,还是像上面的问题一样,具有这种行为是否有效?几年前,我不记得它是哪台设备,但它使用的是Windows驱动程序。
TCP链路的一端断开连接时,它将向另一端发送重置(RST)消息。
不正常。
我希望能够在应用程序层中收到此消息。
你会。
我已经看到,当select()显示有准备好在连接上读取的数据,然后read()调用返回读取的0个字节时,发生在通过TCP发送RST之后。
不。
仅在重置连接后,read()才在TCP连接上返回0字节(在select()之后)吗?
如果连接已重置,则永远不会。errno == ECONNRESET
在这种情况下,它返回-1 。
在任何其他情况下,它是否都返回0字节?
当且仅当接收到FIN(即,对等方关闭连接或关闭其套接字以输出)时,它才返回零。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句