Linux shutdown与close

时间:2021-06-06 19:09:08   收藏:0   阅读:0

shutdown和close都可以用来关闭TCP连接, 那么它们有区别与联系呢?
下面来研究下这个问题:

1. close

关闭连接和套接字. 成功返回0; 失败为-1, errno被设置

#include <unistd.h>
int close(int fd);
  1. close会把描述符(sockfd)引用计数-1, 当计数为0时, 才真正断开连接、关闭套接字

  2. close终止读、写两个方向的数据传送

注意: close会关闭2个方向的连接

2. shutdown

关闭连接的一个方向, 具体取决于参数how. 成功返回0; 失败为-1, errno被设置

#include <sys/socket.h>

int shutdown(int sockfd, int how);

how有3个值:

3. shutdown和close区别

  1. close关闭2个方向连接, 并释放连接对应资源(套接字), 而shutdown不会释放所有资源;
  2. close有引用计数的概念, 只有计数为0时, 才会释放套接字资源; shutdown没有引用计数, 是直接释放how指定的资源;
  3. close后, 只有引用计数为0时, 才会发送FIN分节; shutdown总会发送FIN分节;

参考

TCP 的四次挥手,连接关闭的2种方式(close和shutdown) | CSDN

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!