作者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://www.ptt.cc/bbs/Perl/M.1442907842.A.CA3.html
→ CindyLinz: 跳掉是指程式結束嗎? 09/22 16:03
→ imce: 對,會跳回~$,程式莫名其妙就結束了 09/22 16:56
→ CindyLinz: 也許是吃到 SIGPIPE 09/22 18:07
→ imce: 加了一個SIGPIPE handler,的確吃了一堆SIGPIPE,程式是不會 09/22 23:41
→ imce: 中止了,但是收到SIGPIPE會有10幾秒會一直收,我再研究研究 09/22 23:42