Jet*_*ype 5 c sockets linux tcp
当TCP链路的一端断开连接时,它会向另一端发送重置(RST)消息.我希望能够在应用程序层中收到此信息.
在我的代码中,我使用一个select()调用来接收来自潜在多个源的输入,包括TCP连接.我已经看到,当select()显示有数据准备好在连接上读取,然后一个read()调用返回0字节读取,这发生在通过TCP发送RST之后.(我理解的recv()作品类似于read().)
是否read()返回0字节(后select()一个TCP连接上)只有当连接被重置?在任何其他情况下它是否会返回0字节?
我记得前一段时间在连接的另一端使用了一个特定的以太网设备,而这个Linux端在接收到0之后接收0字节select(),但不是用于连接重置,而是在某些数据流中途.我在Wireshark中确认收到的数据包有0个数据字节.这是一个错误,或者像上面的问题一样,这种行为是否有效?我不记得它是哪个设备,因为它是几年前,但它使用的是Windows驱动程序.
当TCP链路的一端断开连接时,它会向另一端发送重置(RST)消息.
不正常.
我希望能够在应用程序层中收到此信息.
你会.
我已经看到,当select()显示有数据准备好在连接上读取,然后read()调用返回0字节读取,这发生在通过TCP发送RST之后.
没有.
仅当连接被重置时,read()是否在TCP连接上返回0字节(在select()之后)?
从不重置连接.errno == ECONNRESET在这种情况下,它返回-1 .
在任何其他情况下它是否会返回0字节?
当且仅当收到FIN时,它返回零,即对等体关闭连接,或关闭其套接字输出.