close与shutdown
shutdown的原型为:
#include <sys/socket.h>
int shutdown(int s, int how);
how可以为如下值:
- SHUT_RD:调用后不能从该socket中读入数据。
- SHUT_WR:调用后不能向该socket中写入数据。
- SHUT_RDWR:综合1和2.即,既不能从该socket中读入数据,也不能向该socket中写入数据。
既然我们已经有了close,为什么还需要shutdown呢?主要有两点:
close本身并不会释放该socket占用的内存,而只是将该socket的引用计数减一。只有当该socket的引用计数减到0时,才会释放相关内存。 所以,调用close并不能保证该socket不可用了,而调用shutdown,可以直接关闭该连接。
shudown可以单方向的关闭一个socket连接,由参数how控制。