看板 Perl 關於我們 聯絡資訊
這問題困擾我很久了,下面這個程式,跑一跑會自動關閉,我抓不到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