通过shutdown函数实现半关闭

本文探讨了TCP连接中FIN信号的应用,区分close与shutdown的功能差异,重点讲解了shutdown函数在半关闭和精细化控制上的优势,包括不同参数SHUT_RD、SHUT_WR和SHUT_RDWR的作用,以及在多文件描述符场景中的使用技巧。
摘要由CSDN通过智能技术生成

---------来源于网络视频整理:

TCP链接中A发送FIN请求关闭,B端回应ACK后,A端进入FIN_WAIT_2状态,进入半关闭状态。

此时A可以接收B发送的数据,但是A不能再向B发送数据。

close函数会实现半关闭,但有时候存在一些情况,close()不足以实现半关闭,

比如使用dup2函数,实现有2个文件描述符指向同一个套接字,此时调用close(fd);只close了一个文件描述符连接(通过fd不能写入数据,只能读数据),但,此时,还有另一个文件描述符指向该socket,还可以通过这个文件描述符进行读。这就不是真正意义半关闭,此时就要使用shutdown函数了

ps:当只有一个文件描述符指向socket时,使用close和shutdown效果是一样的。

使用shutdown比close的优势是,可以仅关闭读,仅关闭写,关闭读写,情况更加精细。同时,当出现多个文件描述符指向同一socket时,调用shutdown,可以将所有的指向都断开

#include <sys/socket.h>

int shutdown(int sockfd,int how);

how包含以下三种情况: 

SHUT_RD(0)

SHUT_WR(1)

SHUT_RDWR(2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值