URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3356
[ Назад ]

Исходное сообщение
"Вопрос о поведении системного вызова select"

Отправлено Yuri , 11-Сен-04 00:38 
Если вызов

select(nfds, &rfds, &wfds, NULL, NULL)

завершился с errno = EINTR
возможна ли ситуация в которой select уже успел модифицировать rfds или wfds ?

Или же можно спокойно перезапускать select с этими же rfds и wfds ?

Спасибо за помощь !


Содержание

Сообщения в этом обсуждении
"Вопрос о поведении системного вызова select"
Отправлено Maxim A.Kuznetcov , 11-Сен-04 03:12 
>Если вызов
>
>select(nfds, &rfds, &wfds, NULL, NULL)
>
>завершился с errno = EINTR
>возможна ли ситуация в которой select уже успел модифицировать rfds или wfds
>?
>
>Или же можно спокойно перезапускать select с этими же rfds и wfds
>?
>
>Спасибо за помощь !
если ты получил EINTR то полагаться на значения rfds,wfds не стоит..
заполни их снова и запускай select, если какое событие было, всё равно мимо тебя не проскочит ;-)
кстати при использовании select одновременно с сигналами, настойчиво рекомендуется функция pselect



"Вопрос о поведении системного вызова select"
Отправлено Yuri , 13-Сен-04 03:02 
Спасибо

Я впринципе и склонялся перезаполнять на всякий случай.
Но думал может можно соптимизировать ;)

Как всегда не внимательно читал, внизу пост человека, ткнул что sets are undefined on error, так как EINTR все-таки относится к error полагатся действительно не стоит.

>>Если вызов
>>
>>select(nfds, &rfds, &wfds, NULL, NULL)
>>
>>завершился с errno = EINTR
>>возможна ли ситуация в которой select уже успел модифицировать rfds или wfds
>>?
>>
>>Или же можно спокойно перезапускать select с этими же rfds и wfds
>>?
>>
>>Спасибо за помощь !
>если ты получил EINTR то полагаться на значения rfds,wfds не стоит..
>заполни их снова и запускай select, если какое событие было, всё равно
>мимо тебя не проскочит ;-)
>кстати при использовании select одновременно с сигналами, настойчиво рекомендуется функция pselect



"Вопрос о поведении системного вызова select"
Отправлено vnp , 11-Сен-04 13:33 
>Если вызов
>
>select(nfds, &rfds, &wfds, NULL, NULL)
>
>завершился с errno = EINTR
>возможна ли ситуация в которой select уже успел модифицировать rfds или wfds
>?
>
>Или же можно спокойно перезапускать select с этими же rfds и wfds
>?
>
>Спасибо за помощь !

man select:
    On error ... the sets and timeout become undefined

Переводить?