Chinaunix首页 | 论坛 | 博客
  • 博客访问: 558892
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: LINUX

2014-09-17 16:28:53

通常调用close函数对socket进行关闭,为啥还要选用shutdown来关闭socket,原因有如下两个:
1).在介绍close的时候,已经说明了,close只有在对应socket的引用计数为0时,才会真正发送FIN报文来关闭这个连接。shutdown没有这个限制,直接发送FIN报文。
2).close同时终止了读和写两个方向的数据传输。但是TCP的双工的,我们有时候需要只接受数据,而不发送数据。shutdown可以结束这个问题。

函数原型:
int shutdown(int fd, int how);
1)how为SHUT_RD(关闭读端),则无法从套接字读取数据;-------不发送FIN
2)how为SHUT_WR(关闭写端),则无法从套接字写数据;---------发送FIN
3)how为SHUT_RDWR(关闭读写),则无法从套接字读和写数据;-------发送FIN

如果只想告诉对端,本端已无数据需要发送,但是可以接受对端的数据,则使用如下调用:
shutdown(fd,SHUT_WR);----------半关闭,得知shutdown SHUT_WR时会发送FIN报文,而SHUT_RD只是接收以后都扔掉,并不会发送FIN报文

阅读(834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~