Обнаруживать зависание сокета без отправки или получения?

Я пишу TCP-сервер, которому может потребоваться 15 секунд или больше, чтобы начать генерировать тело ответа на определенные запросы. Некоторым клиентам нравится закрывать соединение на своем конце, если ответ занимает более нескольких секунд.

Поскольку создание ответа очень загружает процессор, я бы предпочел остановить задачу в тот момент, когда клиент закрывает соединение. В настоящее время я не узнаю об этом, пока не отправлю первую полезную нагрузку и не получу различные ошибки зависания.

Как я могу определить, что одноранговый узел закрыл соединение, не отправив и не получив никаких данных? Это означает для recv , что все данные остаются в ядре, или для send , что данные фактически не передаются.

25
задан Matt Joiner 11 September 2014 в 04:17
поделиться