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