A resposta é muito simples no final. Temos que usar open('/dev/ptmx') em vez do antigo mecanismo openpty() .
Já existe uma pergunta: A tela falha ao liberar pty e não há resposta (apenas uma solução alternativa foi fornecida até agora).
Meu caso é diferente e gostaria de saber a resposta para a pergunta original. Então, por que socat (mesmo versão recente 1.7.3.0) ignora o screen quando o último fecha o pipe?
Tags gnu-screen socat