我有一个使用IO :: Socket :: INET建立TCP服务器的脚本
my $socket = new IO::Socket::INET (
LocalHost => '0.0.0.0',
LocalPort => '10010',
Proto => 'tcp',
Listen => 5,
);
如果我的脚本崩溃或在服务器套接字关闭之前被用户停止,那么下次运行脚本时,它就无法绑定到该端口,因为仍有进程在监听该端口>
除了结果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.
解决此问题的唯一方法是重新启动或增加侦听端口。由于我不是一个真正的软件开发人员,并且可以在不崩溃的情况下第一次编写出色的代码,因此我经常遇到这个问题。
还值得注意的是,只有在客户端连接到服务器后,这种情况才会发生。
是否有办法阻止这种情况的发生(没有孤儿听取过程)或摆脱孤儿的方法?
答案 0 :(得分:2)
添加以下内容后问题消失了吗?
在大多数系统上,解决方案是:
my $socket = new IO::Socket::INET (
...
ReuseAddr => 1,
ReusePort => 1,
...
);
在没有SO_REUSEPORT
的系统(例如Windows)上,解决方案是:
my $socket = new IO::Socket::INET (
...
ReuseAddr => 1,
...
);