У меня есть сигнальный сокет для чтения из select (), но затем никакие данные не были получены вызовом recv (), вместо этого он возвращает -1 с errno == EAGAIN.
Я могу допустить, чтобы никакой другой поток не касался сокета.
Я думаю, что это поведение не правильно. Если происходит последующее закрытие с другой стороны, я могу ожидать возврата значения 0 (изящное закрытие) или другого кода ошибки из recv, но не EAGAIN, потому что, по моему мнению, это означает, что данные поступят в будущем.
Я нашел предыдущую ветку о проблеме здесь , но без решения.
Такое поведение происходит со мной в Ubuntu Linux Oneric или других последних дистрибутивах Linux, затем информация по ссылке, размещенной здесь
То, что это будет исправлено в ядре, неверно для ядра 3.0.0 или более поздней версии 2.6.x
Кто-нибудь знает, почему это происходит и как избежать этого нежелательного поведения?