параметр флага функции linux recv ()? - PullRequest
1 голос
/ 02 июня 2011

Что произойдет, если я использую recv(sockfd, buffer, len, 0); на неблокирующем сокете?

Если сокет sockfd закрыт или ничего не читается, блокирует ли recv()?(примечание: флаг recv () равен 0).

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Если сокет помечен как не блокирующий, recv никогда не заблокирует. период.

Если с сокетом все в порядке, но данных для чтения нет, вы получите -1 в качестве возвращаемого значения, а для errno будет установлено значение EAGAIN.

Если есть ошибка (закрытый сокет и т. Д.), Вы все равно получите возвращаемое значение -1, но для errno будет установлено соответствующее значение.

0 голосов
/ 02 июня 2011

Если нечего читать, он заблокируется, если сокет закрыт, он вернется с ошибкой.

См. Справочную страницу recv .

...