Это относится к TCP-сокетам ядра Linux 2.6.
Я отправляю большой объем данных, скажем 300 МБ, с неблокирующей отправкой другому клиенту, который получает 8 МБ за раз.
После одного приема 8 МБ «получатель» прекращает прием, потому что он хочет выполнить другие задачи, такие как обработка ошибок. Отправитель получит EWOULDBLOCK, но поскольку это асинхронная связь, отправитель попытается заполнить буфер recv TCP на другом конце.
Мой вопрос: будут ли данные в буфере TCP recv, даже если «отправитель» получил EWOULDBLOCK, а «получатель» перестает получать? Тот же сокет используется для обработки ошибок, поэтому должен ли «получатель» затем очистить буфер TCP recv, прежде чем пытаться повторно использовать существующий сокет?