O tempo limite do kernel só se aplica se a conexão for órfã. Se a conexão ainda estiver conectada a um soquete, o programa que possui esse soquete é responsável pelo tempo limite do desligamento da conexão. Provavelmente ele chamou shutdown
e está aguardando a conexão ser encerrada de forma limpa. O aplicativo pode esperar o tempo que desejar até que o desligamento seja concluído.
O típico fluxo de desligamento limpo é assim:
-
O aplicativo decide encerrar a conexão e encerra o lado de gravação da conexão.
-
O aplicativo aguarda que o outro lado desligue sua metade da conexão.
-
O aplicativo detecta o desligamento da conexão do outro lado e fecha seu soquete.
O aplicativo pode esperar na etapa 2 pelo tempo que desejar.
Parece que o aplicativo precisa de um tempo limite. Uma vez que ele decida desligar a conexão, ela deve desistir de esperar que o outro lado faça um desligamento limpo depois de um tempo razoável.