LINUX.ORG.RU

select и send


0

0

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

anonymous

Re: select и send

IMHO невозможно. Но на всякий случай лучше использовать неблокирующие сокеты.

asso_w ()

Re: select и send

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

amm ()
Ответ на: Re: select и send от asso_w

Re: Re: select и send

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

anonymous ()
Ответ на: Re: select и send от asso_w

Re: Re: select и send

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

кстати о FAQ :)

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

idle ★★★★★ ()
Ответ на: Re: Re: select и send от asso_w

Re: Re: Re: select и send

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

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

amm ()
Ответ на: Re: Re: Re: select и send от amm

Re: Re: Re: Re: select и send

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

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