定义
#include<unistd.h>
int close(int sockfd); //返回成功为0,出错为-1.
#include<sys/socket.h>
int shutdown(int sockfd,int howto); //返回成功为0,出错为-1.
该函数的行为依赖于howto的值
1.SHUT_RD:值为0,关闭连接的读这一半。
2.SHUT_WR:值为1,关闭连接的写这一半。
3.SHUT_RDWR:值为2,连接的读和写都关闭。
区别
- close函数会关闭套接字ID,如果有其他的进程共享着这个套接字,那么它仍然是打开的,这个连接仍然可以用来读和写,只是套接字的引用计数减1。
- shutdown会切断进程共享的套接字的所有连接,不管这个套接字的引用计数是否为零,那些试图读得进程将会接收到EOF标识,那些试图写的进程将会检测到SIGPIPE信号,同时可利用shutdown的第二个参数选择断连的方式
- 调用shutdown()只是进行了TCP断开, 并没有释放文件描述符