作者imce (蜥蜴)
看板Perl
标题[问题] socket server会自动关闭
时间Tue Sep 22 15:43:59 2015
这问题困扰我很久了,下面这个程式,跑一跑会自动关闭,我抓不到BUG。
在eval那行会跳掉,没有$@错误讯息,理论上用eval遇到错误应该会继续跑,不应该会
关闭程式才对啊?
用thread也会跳掉,fork不会,但是系统会跑出很多process,不开心。
我猜是socket->send那边,send不出去出问题导致的,拜托高手帮个忙谢谢。
我的系统是raspbian,perl 5.14.2,client是用chrome去连的。
------------------server.pl--------------------
my $server = IO::Socket::INET->new( Proto => 'tcp',
LocalPort => 80,
Listen => SOMAXCONN,
Reuse => 1);
die "$0: can't setup server" unless $server;
while (my $client = $server->accept())
{
eval{status($client);};
print $@,$/ if $@;
#threads->create("status", $client);
#my $pid;
#unless ($pid = fork)
#{
# status($client);
# exit;
#}
}
sub status
{
my $client_socket = $_[0];
my $data;
$client_socket->recv($data, 1024);
$client_socket->send("HTTP/1.0 200 OK\r\n");
$client_socket->send("Content-type: text/plain\r\n\r\n");
$client_socket->send("test");
$client_socket->close();
$client_socket->shutdown(1);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.34.56.231
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1442907842.A.CA3.html
1F:→ CindyLinz: 跳掉是指程式结束吗? 09/22 16:03
2F:→ imce: 对,会跳回~$,程式莫名其妙就结束了 09/22 16:56
3F:→ CindyLinz: 也许是吃到 SIGPIPE 09/22 18:07
4F:→ imce: 加了一个SIGPIPE handler,的确吃了一堆SIGPIPE,程式是不会 09/22 23:41
5F:→ imce: 中止了,但是收到SIGPIPE会有10几秒会一直收,我再研究研究 09/22 23:42