Mantenga los enchufes Alive TCP / IP conectados a través de Internet: ¿cuándo? ¿cómo? ¿y cuánto?

ACTUALIZAR: Vaya a la respuesta si quiere ahorrarse el largo preámbulo.

Las conexiones TCP / IP KeepAlives se especifican al menos una vez cada dos horas:http://tools.ietf.org/html/rfc1122#page-101. ¡El problema es que esto fue escrito en 1989 y le preocupa el costo de enviar el paquete KeepAlive adicional! Sin embargo, todavía es el tiempo predeterminado que la mayoría de los sistemas operativos de acuerdo con la especificación envían KeepAlives a un enchufe conectado después de un período de inactividad. Por supuesto, hoy en día la mayoría de las conexiones caducan antes de eso si están inactivas, y si se conectan a un par a través de Internet, las conexiones mueren sin su conocimiento antes (a pesar de establecer un tiempo de espera más alto que eso), sospecho porque las tablas de enrutadores intermedios no molestan vivo - Siempre me pregunté a dónde va el último mensaje filtrado ...ACTUALIZAR: La razón de esto es que los 'enrutadores' que pueden estar en el extremo de los hosts remotos son 'con estado' y son conscientes de la conexión y desconectan la conexión después de un período de inactividad: los enrutadores que atraviesas por Internet no pueden desconectar tu conexión - no les importa - el paquete solo se envía a donde tiene que ir). Así que he visto 2 soluciones comunes para mantener viva la conexión a través de Internet:

1) Desprecio (EDITAR: como se me ha señalado, esto no está ignorando la especificación, solo está cambiando la predeterminada) la especificación y cambiar el intervalo de KeepAlive de todo el sistema a menos de 2 horas, o 2) implementar su propio sistema 'KeepAlive' sondeando periódicamente a los pares.

De cualquier manera; ¿Cuál es un período adecuado (de inactividad para enviar su KeepAlive)? He visto todo, desde 1 segundo hasta las 2 horas predeterminadas. Parece que el número se extrae de los pulgares ... Si tengo una aplicación cliente que se conecta potencialmente desde cualquier lugar del mundo, ¿qué período es seguro y razonable (quiero una única conexión persistente)? Al conectarse a un par a muchos saltos del otro lado del mundo a través de Internet, la conexión se apaga en 301 segundos (aunque solo lo sabe cuando intenta enviar algo), por lo que establecer el período en 300 segundos parece ser el número mágico: Recibo el KeepAlive 1 segundo antes de la muerte; este intervalo nunca me ha fallado ... ¿pero es seguro?

EDITAR: Esta conexión particular la estoy implementando en C # 3.0, así que codifique en esa bienvenida.