Строки 21-29. Обработка дескрипторов чтения. В следующем фрагменте кода путем вызова метода handles ( ) объекта IO::Poll с маской pollout и pollerr выполняется выборка дескрипторов, в которых имеются данные для чтения или которые сигнализируют о конце файла.
Если для чтения готов дескриптор stdin, из него считываются данные и добавляются к переменной $to_socket. Аналогичным образом данные из сокета добавляются к переменной $to_stdout. Если любая из операций чтения оканчивается неудачей, то устанавливается истинное значение одного или обоих флажков $stdin_done и $sock_done. Эти флажки проверяются в конце цикла.
Строки 30-48. Обработка дескрипторов записи. Теперь настало время для обработки дескрипторов, предназначенных для записи. Вызывается метод handles () объекта IO::Poll с маской, которая возвращает дескрипторы файлов, либо готовые для записи, либо содержащие ошибки. Если в списке есть дескриптор stdout, то предпринимается попытка записать в него содержимое переменной $to_stdout. Такая же попытка предпринимается для сокета, с использованием переменной $to_socket. Поскольку оба дескриптора являются неблокирующими, приходится иметь дело с ошибками ewouldblock и неполными операциями записи. Здесь применяется логика, аналогичная описанной ранее. В случае возникновения ошибки ewouldblock соответствующий дескриптор файла пропускается и попытка записи в него повторяется через некоторое время. При неполной записи удаляется успешно записанная часть буфера, а незаписанная часть остается для следующей попытки.
2015-01-17 22:04:27
это интересно Бытовой мусор всегда доставляет нам ряд неудобств. Чтобы этого не происходило можно использовать мешки для мусора 30л 20шт в комплекте, которые можно заказать на страницах сайта avant52.ru. Кроме всего прочего на сайте можно заказать упаковочный материал и средства индивидуальной защиты при строительных работах.