gpt4 book ai didi

Perl fork 套接字服务器,当客户端断开连接时停止接受连接

转载 作者:行者123 更新时间:2023-12-03 22:45:59 25 4
gpt4 key购买 nike

在使用以下代码时,以及在 IO::Socket::INET 中使用类似代码时,一旦客户端断开连接,我在接受新连接时就会遇到问题。

似乎 parent 停止 fork 新的 child ,直到所有以前的 child 都结束/断开连接。虽然连接被接受。

有没有人知道我做错了什么。

#!/usr/bin/perl -w
use Socket;
use POSIX qw(:sys_wait_h);

sub REAPER {
1 until (-1 == waitpid(-1, WNOHANG));
$SIG{CHLD} = \&REAPER;
}

$SIG{CHLD} = \&REAPER;

$server_port=1977;

socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
$my_addr = sockaddr_in($server_port, INADDR_ANY);
bind(SERVER, $my_addr)
or die "Couldn't bind to port $server_port : $!\n";
listen(SERVER, SOMAXCONN)
or die "Couldn't listen on port $server_port : $!\n";
print("[$$] STARTED\n");
while (accept(CLIENT, SERVER))
{
next if $pid = fork;
die "fork: $!" unless defined $pid;
close(SERVER);
print("[$$] CONNECTED\n");
while(<CLIENT>)
{
print("[$$] $_\n");
}
print("[$$] EXIT\n");
exit;
}
continue
{
close(CLIENT);
}
print("[$$] ENDED\n");

最佳答案

在 POSIX.1-2001 兼容系统上,只需设置 $SIG{CHLD} = 'IGNORE' 就应该 solve the problem .

关于Perl fork 套接字服务器,当客户端断开连接时停止接受连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7662711/

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