Я пишу TCP-сервер, который может занять 15 секунд или больше, чтобы начать генерировать тело ответа на определенные запросы. Некоторым клиентам нравится закрывать соединение в конце, если для завершения ответа требуется более нескольких секунд.
Поскольку генерация ответа очень интенсивно связана с процессором, я бы предпочел остановить задачу в тот момент, когда клиент закрывает соединение. В настоящее время я не нахожу это до тех пор, пока не отправлю первую полезную нагрузку и не получаю различные ошибки отладки.
Как я могу обнаружить, что сверстник закрыл соединение без отправки или получения каких-либо данных? Это означает, что для recv
все данные остаются в ядре или для send
, что данные фактически не передаются.