Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125747
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-01 15:34
个人简介

不晓得说啥子

文章分类

全部博文(42)

文章存档

2015年(41)

2014年(1)

我的朋友

分类: C/C++

2015-04-21 19:44:30

     终止网络连接的通常方法是调用close函数。不过close函数有两个限制,却可以使用shotdown函数来避免:

     1、close函数把描述符的引用计数减1, 仅在该计数器变为0时才关闭套接字。使用shutdown函数可以不管引用计数就激发TCP的正常连接终止序列。

     2、close终止读和写两个方向的数据传。既然TCP是全双工的,有时候我们需要告知对方我们已经发送完数据,即使对方还有数据需要发送给我们。

#include
int shutdown(  int sockfd,  int howto);

          返回:若成功返回0,出错返回-1

该函数的行为依赖于参数howoto的值:
     SHUT_RD    关闭连接读的这一半——套接字中不再有数据可接收,而且套接字缓冲区的现有数据会被丢弃。进程不能再对这样的套接字调用任何读        函数。对于这样的套接字,对端所发的任何数据都会被确认,但是会悄然丢弃。
     
     SHUT_WR   关闭连接写得这一半——对于TCP套接字这也称为半关闭(half-close),当前套接字发送缓冲区中的数据将会被发送,后跟TCP正常的连接终止序列。不管套接字描述符的引用计数是否为0,这样的套接字写半部都照样关闭,进程不能再对这样的套接字进行写操作。

     SHUT_RDWR 连接的读写都将关闭——这与调用shutdown函数两次相同,第一次调用指定SHUT_RD,第二次调用指定SHUT_WR。
          


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