Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > проблема с пониманием логики select |
Автор: e7x 11.6.2007, 22:10 | ||||
ребята, помогите, весь мозг сломал! хоть дубиной меня бейте, никак не могу понять логику работы select для неблокирущих сокетов... код я предельно упростил, для концентрации на сути проблемы $wvec, $rvec, $evec - векторы с установленными битами для обработки действий на соотв. сокетах $url - глобальный адрес, который нам нужен через прокси $host - хост программа иногда вываливается без сообщений об ошибке и видимых причин во время попытки записать что-нибудь в готовый для записи сокет syswrite'ом. таким образом, код получается рабочий, но непонятным образом глючный... вот код, место вылета отмечено в комментариях:
сдается мне, я неверно понял логику работы select, и, собственно, надеюсь на вашу помощь повторюсь, сокеты неблокирующие (Blocking => 0) =========== проблему решил сам, и, как всегда, все просто в очередной раз спасибо Стивенсу и его "разработке сетевых приложений", и я еще раз убедился в том, что интернет - помойка. надеюсь, кто-то потом будет искать и найдет этот топик. Итак, решение проблемы: нужно было перед каждым ридом/врайтом сокета проверять getsockopt($sock, SOL_SOCKET, SO_ERROR) кому интересно, вот финальный код:
всем спасибо и доброе утро =) плодотворная ночка выдалась |
Автор: nitr 11.6.2007, 22:17 | ||
Посоветую вам использовать и прочесть IO::Select perldoc IO::Select , существенно облегчит вам жизнь. Добавлено через 2 минуты и 16 секунд и у вас некое запутанное понимаение select, даже по доке иначе:
|
Автор: e7x 11.6.2007, 22:22 |
nitr, селекта в перле две штуки ;) первая - описанная вами вторая - та, что использую я спасибо, сейчас IO::Select подергаю Добавлено через 10 минут и 59 секунд ой, IO::Select не получится использовать. метод can_read возвращает массив хендлов, а метод select 3 ссылки на массив хендлов. мне же не просто хендлы нужны, мне еще нужно знать какой адрес успешно присоединился ![]() |
Автор: e7x 12.6.2007, 04:28 |
проблема решена, см. первый пост |