免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2858 | 回复: 1

close和shutdown的区别 [复制链接]

论坛徽章:
0
发表于 2014-08-27 17:52 |显示全部楼层
本帖最后由 sjdy521 于 2014-08-27 17:54 编辑
  1. use Socket;
  2. socketpair(my $master_fd,my $worker_fd,AF_UNIX,SOCK_STREAM,0) or die $!;
  3. if(fork ==0){#worker
  4.     sleep 1;
  5.     shutdown $worker_fd,2;
  6. }
  7. else{#master
  8.     while(<$master_fd>){
  9.         print;
  10.    
复制代码
  1. use Socket;
  2. socketpair(my $master_fd,my $worker_fd,AF_UNIX,SOCK_STREAM,0) or die $!;
  3. if(fork ==0){#worker
  4.     sleep 1;
  5.     close $worker_fd;
  6. }
  7. else{#master
  8.     while(<$master_fd>){
  9.         print;
  10.     }
  11. }
复制代码
两段代码,本以为close和shutdown SOCKET,2都是关闭整个连接的意思,没想到实际测试发现差异很大
第一段代码因为子进程关闭了整个连接的读写,主进程也读取到eof而退出,第二段代码使用了close来关闭fd,但这种关闭却只对子进程有效(fd的引用计数问题吧),完全没有影响到主进程。主进程仍然因为没有读到数据而阻塞住


看来以后真不能把close和shutdown乱用,但socket编程里为什么这点不能做到统一呢,不是很理解

论坛徽章:
0
发表于 2014-09-01 12:09 |显示全部楼层
关于这2个关闭,文档里都写的很清楚的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP