初めまして。 FreeBSD 3.5.1と、それに付属のperlを使っています。 そこでソケットに関するプログラムを組みましたが、ちょっと問題が出てきました。 下記のソースを見てください。 HTTPサーバに接続して、メッセージを受け取り、一定時間何も受信できないと プログラムを終了しようとしています。 (本当は、相手のサーバからコネクションを切られたら終了するようにしたいんです。) サーバと接続されいる状態では、selectは期待した値を戻してくれるのですが、 接続が切断されたあとも、selectの戻り値が 0以外で、いつまでたっても、 ループから抜けられません。 なにか解決方法はないでしょうか? (大抵のサンプルはwhile (<SOCK>) って感じでやってるみたいですが、 バイナリファイルが対象でもうまくいくのでしょうか?) ## ソケットを開いて、ポート80)に繋ぐ。 ## send(SOCK,"GET /index.html HTTP1.0\r\n",0); $rin=''; vec($rin,fileno(SOCK),1)=1; while (1) { $ret = select($rout=$rin,undef,undef,1); if ($ret == 0 ) { last; } #タイムアウト recv(SOCK,$x,1,0); print $x; } |