![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
e7x |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 24.4.2007 Репутация: нет Всего: нет |
ребята, помогите, весь мозг сломал! хоть дубиной меня бейте, никак не могу понять логику работы select для неблокирущих сокетов...
код я предельно упростил, для концентрации на сути проблемы $wvec, $rvec, $evec - векторы с установленными битами для обработки действий на соотв. сокетах $url - глобальный адрес, который нам нужен через прокси $host - хост программа иногда вываливается без сообщений об ошибке и видимых причин во время попытки записать что-нибудь в готовый для записи сокет syswrite'ом. таким образом, код получается рабочий, но непонятным образом глючный... вот код, место вылета отмечено в комментариях:
сдается мне, я неверно понял логику работы select, и, собственно, надеюсь на вашу помощь повторюсь, сокеты неблокирующие (Blocking => 0) =========== проблему решил сам, и, как всегда, все просто в очередной раз спасибо Стивенсу и его "разработке сетевых приложений", и я еще раз убедился в том, что интернет - помойка. надеюсь, кто-то потом будет искать и найдет этот топик. Итак, решение проблемы: нужно было перед каждым ридом/врайтом сокета проверять getsockopt($sock, SOL_SOCKET, SO_ERROR) кому интересно, вот финальный код:
всем спасибо и доброе утро =) плодотворная ночка выдалась Это сообщение отредактировал(а) e7x - 12.6.2007, 04:27 |
||||
|
|||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Посоветую вам использовать и прочесть IO::Select
perldoc IO::Select , существенно облегчит вам жизнь. Добавлено через 2 минуты и 16 секунд и у вас некое запутанное понимаение select, даже по доке иначе:
|
|||
|
||||
e7x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 24.4.2007 Репутация: нет Всего: нет |
nitr, селекта в перле две штуки ;)
первая - описанная вами вторая - та, что использую я спасибо, сейчас IO::Select подергаю Добавлено через 10 минут и 59 секунд ой, IO::Select не получится использовать. метод can_read возвращает массив хендлов, а метод select 3 ссылки на массив хендлов. мне же не просто хендлы нужны, мне еще нужно знать какой адрес успешно присоединился ![]() Это сообщение отредактировал(а) e7x - 11.6.2007, 22:24 |
|||
|
||||
e7x |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 24.4.2007 Репутация: нет Всего: нет |
проблема решена, см. первый пост
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |