我正在开发一个 TCP 服务器端应用程序,它将数据转发到客户端。
我面临的问题是我试图在我的服务器端应用程序上找出我的客户端是否断开连接以及哪些数据已发送,哪些未发送。
我的研究表明,基本上有两种方法可以找出答案:
- 1) 从套接字读取并检查 FIN 信号是否返回
- 2) 等待发送调用上的 sigpipe 信号
第一个解决方案对我来说似乎并不可靠,因为我不能保证客户端不会发送任何随机数据,因此即使它不应该成功也会使我的测试成功。
第二种解决方案的问题是,我只在调用 X 之后才获得 sigpipe,send
因此无法保证真正发送了哪些数据,哪些没有。我在 SO 和其他网站上读到这里,sigpipe 只应该在第二次调用之后出现send
,如果我只通过 localhost 发送和接收,我可以重现这种行为,但如果我真的使用网络就不行。
我现在的问题是 X 可以变化是否正常,如果是,我可能会考虑哪些参数来改变这种行为,或者由于 TCP 的性质,这是否可能不可靠。