[問題] socket server會自動關閉

看板Perl作者 (蜥蜴)時間9年前 (2015/09/22 15:44), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
這問題困擾我很久了,下面這個程式,跑一跑會自動關閉,我抓不到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

09/22 16:03, , 1F
跳掉是指程式結束嗎?
09/22 16:03, 1F

09/22 16:56, , 2F
對,會跳回~$,程式莫名其妙就結束了
09/22 16:56, 2F

09/22 18:07, , 3F
也許是吃到 SIGPIPE
09/22 18:07, 3F

09/22 23:41, , 4F
加了一個SIGPIPE handler,的確吃了一堆SIGPIPE,程式是不會
09/22 23:41, 4F

09/22 23:42, , 5F
中止了,但是收到SIGPIPE會有10幾秒會一直收,我再研究研究
09/22 23:42, 5F
文章代碼(AID): #1M0GR2oZ (Perl)
文章代碼(AID): #1M0GR2oZ (Perl)