当我们在带有参数SHUT_RDWR的套接字上调用shutdown()函数时,我们停止了套接字上的读/写可能性,但套接字仍然没有被 destruct .我不明白SHUT_RDWR的目的.它给了我们什么?为什么我们需要一个没有读/写可能性的套接字?我认为SHUT_RDWR应该像close()函数一样工作,但事实并非如此.

推荐答案

SHUT_RDWR所做的是关闭套接字上的连接,同时保持数据句柄(文件描述符)打开.

例如,假设一个套接字用于双向通信,而您的连接端用SHUT_RDWR将其关闭.然后,如果连接另一端的人try 写(也许也读?),它将失败,因为连接已关闭.

但是,文件描述符仍处于打开状态,这意味着如果有任何数据留给您接收/读取,您可以继续操作,然后关闭文件描述符.

换句话说,shutdown()表示关闭连接,close()表示关闭文件描述符并丢弃文件描述的"缓冲区"中的任何数据

UNIX环境中的高级编程也有以下原因:

既然我们可以关闭插座,为什么需要关机?有几个

C++相关问答推荐

为什么这个select()会阻止?

以c格式打印时间戳

如何在C中只使用一个带双方括号([i][j])访问语法的malloc来分配动态大小的2d数组?

C中的__attributor__((aligned(4),packed))与 struct 的用法

va_copy的使用是未定义的行为吗?

我编译了一个新的c程序,并收到以下错误

显式地将值转换为它从函数返回的类型的含义是什么?

如何使用低级C++写出数值

初始变量重置后,char[]的赋值将消失

对重叠字符串使用MemMove

Vcpkg的配置文件

这个计算C中阶乘的函数正确吗?

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

链接到底是如何工作的,我在这里到底做错了什么

使用mmap为N整数分配内存

Linux Posix消息队列

未使用sem_open正确初始化信号量

GDB 跳过动态加载器代码

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码

在 C 中的 scanf() 格式说明符中使用宏获取字符串长度