Perl 网络编程socket练习(三)

前面多进程测试时发现两个问题:

1.如果不在fork后的进程执行关闭对方socket对象,会如何?

      该问题仅通过这里的脚本测试并无异常出现,但从后台进程仍看出一些区别,如下是启动一个client后的服务端进程

#lsof -Pnl +M -i4 | grep 65432
perl      5530      500    3u  IPv4  18424       TCP *:65432 (LISTEN)
perl      5533      500    3u  IPv4  18424       TCP *:65432 (LISTEN)
perl      5533      500    4u  IPv4  18425       TCP 192.168.10.15:65432->192.168.10.16:52494 (ESTABLISHED)

可以看到,父进程5530 仅包含一个监听,但子进程5533却多出一个监听,这应该是由于子进程中未执行关闭监听导致。虽然,子进程存在监听,但由于子进程进入连接循环后不再响应监听,所以对我们的测试并无影响。至于在更高级的应用里有什么影响,现在还不清楚?


2.父进程异常中断后会发生什么情况?

    父进程执行后占据控制台,假如键盘按Ctrl+C中断进程,这时父进程被终止退出,但我们在客户端上可以输入并得到回显。查看端口发现,后台仍有ESTABLISHED的连接,但是LISTEN状态的消失了。而LISTEN正对应着父进程,也就是父进程退出,原来的子进程仍在后台,查看进程果然后台有,该子进程的父进程号变为1。

  修改server程序,在信号INT处理匿名函数中添加如下:

$SIG{INT} = sub { $quit++; exit 0 };

这时父进程被中断,子进程同样收到该信号并退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值