September 21st, 2006

  • atento

Как читать из потока (файла?) с таймаутами?

Приветствую всех,
Пишу простой ftp-проксик через IO::Socket,
Создается два потока - $sock_remote и $client
После успешного подключения к внешнему ftp читаю ответ с сервера:
while( <$sock_remote> {
   print $client $_;
   print $_;
   last if( /^\s*$/);
}

На этом месте все виснет. Чтение по символьно из потока также зависает как только пытается прочитать еще один байт сверх того что сервер прислал в ответ (ждет следующий байт)
В итоге клиент, получив нормальный ответ от ftp, посылает уже авторизацию, но перл так и не может выйти из этого цикла :(

Вопросы:
1. Как отловить конец потока? length($sock_remote) не помогает
2. Может как-то с таймаутами читать - если чтение следующего символа зависает, то прекращать чтение и читать уже чо клиент говорит?
3. Может у кого готовый FTP-прокси есть на перле или другой (не CGI)