Идентифицировать клиента, отключенного от сокета в C

#c #sockets #networking #boost

#c #сокеты #сеть #повышение

Вопрос:

У меня есть сервер C , где клиенты будут подключаться к сокету сервера и получать результаты поиска. Я использую библиотеку Boost для программирования своих сокетов.

Всего будет 5 результатов поиска, к которым подключается клиент. Вычисление этих результатов поиска для сервера является дорогостоящим, и вычисления выполняются итеративным способом. Теперь, что происходит много раз, так это то, что клиенты отключаются после того, как они получили результаты для 2 или 3 результатов поиска. Я хочу остановить поток обработки поиска, как только клиент, отправивший запрос, отключится. Какой лучший вызов API для подтверждения этого? Я готов написать свою собственную оболочку поверх boost, если это вообще возможно.

Я использую только HTTP.

Спасибо

Комментарии:

1. Используете ли вы HTTP или HTTPS (или оба) в качестве своего протокола?

2. @owacoder : Я добавил информацию к вопросу. Я использую только HTTP.

Ответ №1:

Единственный способ обнаружить отключение TCP — это выполнить с ним ввод-вывод. После нескольких отправок одноранговому узлу, который отключился, вы получите ECONNRESET. Это не произойдет при первой отправке из-за буферизации TCP.

Комментарии:

1. Спасибо за информацию, но в таком случае я бы фактически отправил клиенту мошенническое сообщение?

2. @Geek, насколько я знаю, наиболее распространенный способ справиться с этими вещами с помощью HTTP (ов) — это использовать мониторинг тайм-аута соединения (отключение сокета, если в течение определенного периода времени не происходило никаких действий).). Тайм-ауты для приема запроса часто короче, чем тайм-ауты для обработки запроса (т.Е. в моем facil.io в проекте время ожидания входящего http по умолчанию составляет 5 секунд, в то время как время ожидания обработки ответа составляет 300 секунд).