A conexão permanece ESTABLISHED em um lado e inexistente no outro, porque esse é o estado em que estava depois que o servidor foi reiniciado. O cliente não tem idéia de que o servidor foi reiniciado e o servidor não tem idéia de que o cliente acha que ainda está conectado. A menos que o cliente tente usar a conexão, ela continuará assim para sempre. (A menos que os keepalives estejam habilitados, caso em que permanecerá assim por cerca de dois dias).
Por que o cliente está sempre esperando pelo servidor ?! O cliente ou o protocolo está quebrado. Se o cliente não está seguindo o protocolo, o cliente está quebrado. Se o protocolo não especificar como detectar uma conexão inativa, o protocolo está quebrado.
O TCP não detecta uma conexão inativa para um terminal que não está tentando enviar dados. Assim, todo protocolo colocado em cima do TCP deve ser projetado para levar isso em conta. Se essa conexão travada não for um comportamento aceitável, esse protocolo será interrompido porque permite esse comportamento inaceitável (ou o cliente é interrompido por não seguir o protocolo).
A especificação do protocolo realmente diz para esperar para sempre por dados? Em caso afirmativo, questionaria a sanidade dos desenvolvedores do protocolo.