我正在开发一个TCP服务器端应用程序,它将数据转发给客户端。在客户端断开连接后首次调用'send'时没有获得sigpipe
我面临的问题是我试图找到我的服务器端应用程序,如果我的客户端断开连接,哪些数据被发送,哪些不是。
我的研究表明,基本上有两种方式找到了这一点:
- 1)从套接字读取和检查FIN信号回来
- 2)等待上的SIGPIPE信号发送呼叫
第一个解决方案似乎并不可靠的我,因为我不能保证客户端不发送任何随机数据,因此就使我的试验成功,即使它不应该。
第二种解决方案的问题是,我只能在调用send
之后得到X后的sigpipe,因此无法保证哪些数据真的发送,哪些不是。我在SO和其他网站上阅读过这篇文章,说sigpipe只会在第二次调用send
后才会出现,如果我只通过本地主机发送和接收,但如果我真的使用网络,则可以重现该行为。
我现在的问题是,如果X是可以改变的,并且如果是的话,我可能会看到哪些参数可以改变这种行为,或者由于TCP本质而不可靠。