Оставьте живыми подключенные к TCP / IP сокеты через Интернет - когда? как? И как много?

ОБНОВИТЬ: Перейдите к ответу, если хотите сохранить длинную преамбулу.

Соединения TCP / IP KeepAlives указываются как минимум раз в два часа:http://tools.ietf.org/html/rfc1122#page-101, Проблема в том, что это было написано в 1989 году и касается стоимости отправки дополнительного пакета KeepAlive! И все же это время по умолчанию, которое большинство операционных систем в соответствии со спецификацией посылает KeepAlives в подключенный сокет после периода бездействия! Конечно, в настоящее время большинство тайм-аутов соединений до этого, если они неактивны, и если они подключены к одноранговому узлу через интернет-соединения, до этого умирают без вашего ведома. это живое - я всегда задавался вопросом, куда утекает последнее сообщение ...ОБНОВИТЬ: Причина этого заключается в том, что «маршрутизаторы», которые могут находиться на вашем или на удаленных хостах, находятся в состоянии «отслеживания состояния» и поддерживают соединение и сбрасывают соединение после некоторого периода бездействия - маршрутизаторы, через которые вы проходите через Интернет, не могут разорвать ваше соединение - им все равно - пакет просто отправляют туда, куда он должен идти). Итак, я видел 2 распространенных решения для поддержания связи через Интернет:

1) игнорировать (РЕДАКТИРОВАТЬ: как было указано мне, это не игнорирование спецификации, это просто изменение по умолчанию) спецификация и изменение общесистемного интервала KeepAlive ниже 2 часов, или 2) периодическая реализация собственной системы KeepAlive, опрашивающей одноранговый узел.

В любом случае; Каков подходящий период (бездействия, при котором вы можете отправить свой KeepAlive)? Я видел все от 1 секунды до 2 часов по умолчанию. Кажется, что число высосано из больших пальцев ... Если у меня есть клиентское приложение, соединяющееся потенциально из любой точки мира, что является безопасным и разумным периодом (я хочу одно постоянное соединение)? При подключении к одноранговой сети, находящейся в разных частях света через Интернет, соединение прерывается на 301 секунду (хотя вы знаете об этом, только когда пытаетесь что-то отправить), поэтому установка периода в 300 секунд кажется магическим числом - Я получаю KeepAlive за 1 секунду до смерти - этот интервал никогда не подводил меня ... но безопасно ли это?

РЕДАКТИРОВАТЬ: Это конкретное соединение я реализую в C # 3.0, так что код приветствуется.

Ответы на вопрос(2)

Ваш ответ на вопрос