Запутался в recv () - PullRequest
       40

Запутался в recv ()

1 голос
/ 02 марта 2010

Простите, если на этот вопрос ответили, но я не смог его найти.

Я немного растерялся из-за recv() и recvfrom(). Как только сервер связывает адрес (или принимает соединение для TCP), вызывается recv(). recv() постоянно проверяет отправленные сообщения или ожидает получения сообщения? Если ждать, сколько времени ждать?

Не уверен, что я понимаю, но если бы кто-то мог просветить меня, я был бы благодарен.

Ответы [ 2 ]

5 голосов
/ 02 марта 2010

Если в сокете нет доступных сообщений и O_NONBLOCK не задано в файловом дескрипторе сокета, recv () блокируется, пока не прибудет сообщение.

Если в сокете нет доступных сообщений и для файлового дескриптора сокета установлено значение O_NONBLOCK, recv () завершится ошибкой и для errno будет установлено значение [EAGAIN] или [EWOULDBLOCK].

Источник: http://www.opengroup.org/onlinepubs/009695399/functions/recv.html

0 голосов
/ 02 марта 2010

Обратите внимание, что вы можете реализовать тайм-аут, используя select () или poll (), что также позволяет вам ждать сразу несколько сокетов.

...