Почему мой Perl sysread блокируется при чтении из сокета? - PullRequest
2 голосов
/ 07 октября 2009

Я делаю sysread в Perl 5.8.2 в AIX 5.3. Согласно документации, sysread должен выдавать 0, когда он прочитал все прочитанные из файлового дескриптора.

В моем сценарии дескриптор файла - STDIN и указывает на сокет. Так что я в основном делаю sysread из сокета. Но я никогда не получаю 0 от sysread и он просто блокируется, даже после того, как клиент отправил все данные.

Есть идеи, что может быть не так?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 07 октября 2009

Что значит "отправил все данные"? sysread возвращает ноль, когда дескриптор встречает условие конца файла, а не когда больше нет доступных данных прямо сейчас . Для сокета EOF при чтении происходит, когда другая сторона отключила сокет для записи. (Ну, а sysread также вернет undef, что численно равно нулю, если произойдет ошибка, такая как таймаут сети.)

2 голосов
/ 07 октября 2009

Проверьте команду select (с четырьмя аргументами). Это может сказать вам есть ли какие-либо входные данные для чтения в вашем дескрипторе файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...