+ -
当前位置:首页 → 问答吧 → Perl在win32平台在这种情况下不能被中断,求解

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流。
请问,怎么做?

作者: yyangsy   发布时间: 2011-06-17

没明白。你要实现的到底是“在程序退出时,安全、自然地关闭Socket IO流。”还是“让ctrl+c能结束程序”?程序结束了socket自然就关闭了。

作者: iambic   发布时间: 2011-06-18