LINUX.ORG.RU

select и send


0

0

Предположим я отслеживаю дескриптор сокета на предмет того что операция записи не будет заблокирована (select), а далее пытаюсь писать в сокет (send). Какова вероятность того что между возвратом из select и вызовом send может возникнуть некая ситуация которая заблокирует send ??? Это вообще возможно теоретически ???

anonymous

Наверное, возможно. Если другая сторона отвалится во время посылки (например, при физическом отключении от сети), то вызов заблокируется, пока не не будет прерван сигналом, либо пока не истекут таймауты на посылку.

amm
()
Ответ на: комментарий от asso_w

Спасибо ! Я вообщем так и сделал: select() и неблокирующий send() и все это в цикле.

anonymous
()
Ответ на: комментарий от asso_w

> IMHO невозможно.

кстати о FAQ :)

возможно, опять же несколько дней назад обсуждалось.
например, другой процесс/поток успел туда что-то написать.
или вы попытаетесь написать больше, чем socket может
принять без блокирования.

idle ★★★★★
()
Ответ на: комментарий от asso_w

Сразу? И на блокирующем тоже?

Кстати, а read'у как неблокирующий режим поможет, если пришла только часть запрошенных данных? Мне думается, что никак.

amm
()
Ответ на: комментарий от amm

Хотя, если подумать, то корректная реализация неблокируещего режима должна вернуть только данные, которые пришли на данный момент. А корректная программа, использующая неблокирующий режим, не должна делать более одного чтения для данного дескриптора, а должна после возврата из read'а передавать дескриптор опять в select.

amm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.