Estou um pouco perplexo, porque achei que o netcat tinha um recurso explícito para lidar apenas com esse caso. Eu pensei que ele esperou até obter EOFs da entrada padrão e do soquete. Talvez seja apenas uma coisa de tempo limite; verifique sua documentação do netcat para ver se há uma opção para continuar lendo no soquete por um determinado período de tempo após obter o EOF no stdin.
Ou você pode usar a resposta do kludge:
(cat msg; sleep 42) | netcat 127.0.0.1 1234