Как сделать изящное закрытие как на стороне http-сервера, так и на стороне браузера при истечении времени ожидания? - PullRequest
0 голосов
/ 27 августа 2011

В http1.1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html), написано:

Когда клиент или сервер желает установить тайм-аут, он ДОЛЖЕН изящно закрыть транспортное соединение. Клиенты и серверы ДОЛЖНЫ постоянно следить за закрытием другой стороны транспорта и реагировать на нее соответствующим образом.

МОЙ вопрос: Как выдать изящное закрытие как на стороне http-сервера, так и на стороне браузера при истечении времени ожидания?

1 Ответ

0 голосов
/ 28 августа 2011

Вы должны закрыть TCP-соединение с любой стороны. Соединение на другой стороне будет закрыто автоматически.

Если вы хотите узнать, как реализовать автоматическое закрытие:

Когда другая сторона хочет закрыть соединение, она отправляет FIN на tcp заголовках. На стороне программы ваш сокет будет активирован функцией select, а функция recv вернет значение 0. Таким образом:

if (recv(socket, ...) == 0) 
  closesocket(socket);
...