服务端已经close为什么客户端的write/read方法都不返回错误呢?

发布于 2021-12-03 07:51:49 字数 366 浏览 880 评论 2

我在同一台机器上做实验,分别运行服务端和客户端,服务端accept后,fork()一个子进程处理,子进程第一次read后阻塞接着客户端第一次write,子进程read返回接着close掉socket,并且调用exit(0)退出。由于子进程消失,但端口资源未被释放,该端口为FIN_WAIT_2的状态。

接着客户端第二次调用write函数,按照常理来讲此时的write会导致服务器响应一个RST给我,但是write返回4096,并不是一个-1,而且我又调用read函数也是一个0,也没有-1,这是怎么一回事?求解

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小瓶盖 2021-12-05 05:50:18

设置一下setsockopt的SO_LINGER,按照你的测试,最好把连接上来的客户端的fd设置为立即关闭.

月牙弯弯 2021-12-05 05:43:18

TCP中的三次握手、分手数据包同普通数据一样,都需要你去read才会处理。服务端关闭了,但你没有去read,所以当前socket是完好的,并没有察觉到对方已断开,还是可以写的。read函数返回0,表明对方已断开,这时就应该要close掉socket了。如果你再写入数据,肯定返回-1。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文