Perl在win32平台在这种情况下不能被中断,求解
时间:2011-06-17
来源:互联网
$sock = IO::Socket::INET->new;
$SIG{'INT'} = sub{
$sock->close;
}
while(<$sock>){...}
因为Socket在读取时会阻塞,在这之前已向服务器发送了一些数据。
如果直接Control+C退出,Socket流不会被关闭,程序会继续向服务器发送上次发送的一些余留数据。
所以我安装了一个中断调用子程,试图在程序结束时,关闭Socket IO流。
但,如果Socket阻塞于一个循环,中断处理程序不会起作用,按下Control+C,程序不会退出,且Socket也不会被关闭,强行关掉命令行窗口,Socket依旧会不断发送上次发送的余留数据。
不知大家明白了没?我就是想实现:在程序退出时,安全、自然地关闭Socket IO流。
请问,怎么做?
$SIG{'INT'} = sub{
$sock->close;
}
while(<$sock>){...}
因为Socket在读取时会阻塞,在这之前已向服务器发送了一些数据。
如果直接Control+C退出,Socket流不会被关闭,程序会继续向服务器发送上次发送的一些余留数据。
所以我安装了一个中断调用子程,试图在程序结束时,关闭Socket IO流。
但,如果Socket阻塞于一个循环,中断处理程序不会起作用,按下Control+C,程序不会退出,且Socket也不会被关闭,强行关掉命令行窗口,Socket依旧会不断发送上次发送的余留数据。
不知大家明白了没?我就是想实现:在程序退出时,安全、自然地关闭Socket IO流。
请问,怎么做?
作者: yyangsy 发布时间: 2011-06-17
没明白。你要实现的到底是“在程序退出时,安全、自然地关闭Socket IO流。”还是“让ctrl+c能结束程序”?程序结束了socket自然就关闭了。
作者: iambic 发布时间: 2011-06-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28