gpt4 book ai didi

perl - 脚本崩溃后,如何避免在 Perl 中使用 ophan 监听套接字?

转载 作者:可可西里 更新时间:2023-11-01 02:47:55 25 4
gpt4 key购买 nike

我有一个使用 IO::Socket::INET 建立 TCP 服务器的脚本

my $socket = new IO::Socket::INET (
LocalHost => '0.0.0.0',
LocalPort => '10010',
Proto => 'tcp',
Listen => 5,
);

如果我的脚本在到达服务器套接字关闭之前崩溃或被用户停止,那么下次运行脚本时它无法绑定(bind)到该端口,因为仍有一个进程在监听该端口

除掉结果netstat -anobp tcp

TCP    0.0.0.0:10010          0.0.0.0:0              LISTENING       22628
[System]

是的,我正在使用 Windows。

任务终止请求:

taskkill /f /PID 22628

失败:

ERROR: The process "22628" not found.

解决此问题的唯一方法是重新启动或增加监听端口。由于我不是真正的软件开发人员并且可以一次编写出不会崩溃的出色代码,所以我经常遇到这个问题。

同样值得注意的是,只有在客户端连接到服务器后才会发生这种情况。

有没有办法阻止这种情况发生(没有孤儿监听进程)或摆脱孤儿的方法?

最佳答案

添加以下内容后问题是否消失?

在大多数系统上,解决方案是:

my $socket = new IO::Socket::INET (
...
ReuseAddr => 1,
ReusePort => 1,
...
);

在没有 SO_REUSEPORT 的系统上,比如 Windows,解决方案是:

my $socket = new IO::Socket::INET (
...
ReuseAddr => 1,
...
);

关于perl - 脚本崩溃后,如何避免在 Perl 中使用 ophan 监听套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com