看板 Perl 關於我們 聯絡資訊
※ 引述《albertliao (~咖啡癮君子~)》之銘言: : 各位好小弟目前使用socket遇到一個問題 , 以下是我的程式碼, : 可以看得來我目前只有要接收 client的msg , 但每次從client接收到的msg都是空的,而且之後 : 就一直執行不斷的印出recv :變成無線迴圈(select變成沒有作用!!) , 請教各位我目前是要不斷接收 : 來自client的訊息而已, 請問是不是哪有寫錯要注意的地方 : 謝謝 : $Socket = new IO::Socket::INET->new(LocalAddr => 'localhost', : LocalPort => 111, : Listen => SOMAXCONN, : Proto => 'tcp', : Reuse => 1 : ) or die "Can't bind : $@\n"; : $s = new IO::Select($Socket); : $i=1; : while($i) : { : if( $s->can_read ) : { : $Socket->recv($text,512); : print "recv : $text\n"; : # $i=0; : } : } 感謝各位熱心的協助 , 目前server問題已解決 , 但我仍然無法使用select 去限定在某個時間內未收到msg就斷線 , 程式如下 , 請各位指點 感謝大家 while( $client=$Socket->accept() ) { print "Accepting connection from ", $client->peerhost(), ".\n"; print $client "Welcome it from Ix_Agent\n"; #$t1 = threads->create(\&fun_recv); $s = new IO::Select($client); $i=1; $timeout=5; while($i) { if($s->can_read($timeout)) #這行似乎無效果 { while ( $_ = <$client> ) { chomp; print "\tClient request: $_\n"; } } else {$i=0; print "error occur\n";} } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.82.195
LiloHuang:找台linux測測看 windows應該不行 06/24 22:47
LiloHuang:印象中是這樣 不然就自己寫 select() 硬幹 06/24 22:47
albertliao:請教一下這個為什麼跟OS有關 謝謝 06/25 09:55
LiloHuang:我只是猜測他的 timeout 會不會用 SIG_ALRM 實做^^" 06/25 19:01
LiloHuang:所以請你換 linux 測試看看囉 06/25 19:01