Отправка асинхронного сокета в Linux - PullRequest
1 голос
/ 12 апреля 2011

Когда отправка по асинхронному сокету возвращает EAGAIN, это означает: что текущий вызов был только что успешно поставлен в очередь или ничего не было сделано, потому что система все еще обрабатывает предыдущую отправку?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 12 апреля 2011

С man 2 send:

Сокет помечен как неблокирующий, и запрошенная операция будет заблокирована. POSIX.1-2001 допускает возврат любой ошибки в этом случае и не требует, чтобы эти константы [EAGAIN EWOULDBLOCK] имели одинаковое значение, поэтому переносимое приложение должно проверять обе возможности.

Итак, я думаю, EAGAIN означает: be careful, the message did not fit into send buffer, this call would be blocked in normal (blocking) mode. Use select(2) to determine whether you can send more data.

P.S. На самом деле, похоже, что звонок не удался и ничего не было сделано.

2 голосов
/ 12 апреля 2011

Ничего не было сделано.

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

...