Se o processo original gerar processos filhos, é possível que os processos filhos mantenham o soquete aberto após a saída do processo pai. Se o processo pai for o único processo com o soquete aberto, ele deve ser limpo após a finalização. Um processo existente fechará todos os descritores de arquivos abertos, o que inclui todos os seus soquetes.
Quando um fechamento é iniciado, o soquete ainda pode estar no estado TIME_WAIT. O TCP tenta garantir a entrega de todos os dados que estão sendo transmitidos. Quando um soquete é fechado, ele entra em TIME_WAIT para atender a essa garantia. Existem várias variáveis que podem exigir algum tempo se elas forem soquetes TCP, como concluir o handshaking ou se os soquetes foram configurados com a opção SO_LINGER.
Aqui está um link que explica TIME_WAIT da FAQ do Socket Unix: link