码迷,mamicode.com
首页 > 其他好文 > 详细

close与shutdown

时间:2019-06-03 21:50:46      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:bsp   img   打开   jpg   图片   alt   inf   方向   例子   

  首先看一个例子,如下图所示:

技术图片

当我们客户端发送ABCD再close套接字的时候,服务器端的接收通道也被关闭了,将无法接收ABCD的数据。如果想要仅仅关闭发送通道,保留接收通道,可以使用shutdown。

 

 一、close与shutdown 的区别:
  1、close终止了数据传送的两个方向
  2、shutdown 可以有选择的终止某个方向的数据传送或者数据传送的两个方向、

二、shutdown 如果howto=1(SHUT_WR),就可以保证对等方接收到一个EOF字符,而不管其他进程是否已经打开了套接字(不管引用计数是否为1都激发TCP的正常终止连接)。而close不能保证(详见下面三中的例子,conn引用计数减为0才关闭),直到套接字引用计数减
位0时才发送。也就是说直到所有的进程都关闭了套接字。

 

三、
  int shutdown(int sockfd,int howto)
    howto=SHUT_RD (0)关闭连接的读的一半,不再接收数据
    howto=SHUT_WR (1)关闭连接的写的一半,
    howto=SHUT_RDWR(2)
例子:
int conn;
pid_t pid=fork();
if(pid==-1)
ERR_EXIT("fork");
if(pid==0)     //子进程
{
   close(sock);

  ....       //通信
  close(conn);//子进程使用完conn,close conn 引用计数减为0,这时才会向双方发送FIN段。
}else if(pid>0)   //父进程
{
  close(conn);//父进程不会向客户端发送FIN.要考虑到引用计数。close(conn) 父进程用不到conn,将conn引用计数减一 。 shutdown(conn,SHUT_WR) 的话不理会引用计数,直接向对方发送FIN段
}

 

close与shutdown

标签:bsp   img   打开   jpg   图片   alt   inf   方向   例子   

原文地址:https://www.cnblogs.com/wsw-seu/p/10970084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!