c - shutdown(2) 系统调用对我不起作用;我不确定我做错了什么

标签 c networking unix

我正在试验 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/

相关文章:

c++ - 如何使用 OpenSSL C 库将 RSA key 从二进制数据加载到 RSA 结构?

c - C中如何检查服务器端是否建立连接

c - 0x53918F0E 处未处理的异常 (ucrtbased.dll)

c++ - 用于服务器编程的 wxwidgets (ftp apachelike)

mysqlcheck 不接受密码

C简单字符串程序无法编译

android - Unity游戏无法上网

networking - 从 docker 容器访问主机的虚拟机

linux - BASH - 计算可执行文件的数量

c++ - 使用 C++ 读取进程本身的标准输出