我正在试验 shutdown(2) 系统调用。 根据手册,它做了我想要的。 当我以下列方式在 TCP 服务器中调用它时:
shutdown(clntSocket, SHUT_RDWR)
那么客户端必须能够观察到 TCP 连接已关闭。 我想,这意味着客户必须能够注意到无法发送/接收更多数据。这是我无法证实的理论。
在此simple experiment我定义了一个 TCP 服务器和一个 TCP 客户端。服务器从客户端接收到 3 个字节,然后调用 shutdown(2)。客户端发送 3 个字节,随后发送另外 3 个字节。两个发送操作都成功。第二次发送操作不应该失败吗?
在此先感谢您的帮助。
最佳答案
发送操作成功仅表示数据已排队等待发送。这并不意味着它实际上已发送或接收。在调用shutdown
之后,如果您想确认另一端是否已完成其关闭过程的一部分,您可以调用read
。一旦 read
返回零或错误,您就知道连接已关闭。
关于c - shutdown(2) 系统调用对我不起作用;我不确定我做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910601/