Is there a way to exec() a program image the moment the operating system realizes that a certain network operation is about to fail for a certain reason, then wait for that program to finish and, if the result is EXIT_SUCCESS, attempt the network operation again?
Não.
Quando a discagem por demanda era usada, ela dependia de tentativas que não eram acionadas pela conexão bem-sucedida. Uma rota padrão foi mantida, com os pacotes descartados até que a conexão fosse feita, para evitar erros de Network unreachable
, que terminariam, e. Tentativas de conexão TCP imediatamente.
Eu imagino que a discagem por demanda do estilo antigo também dependia de tempos limite de DNS / contagens de tentativas maiores do que as usadas atualmente. Em um sistema moderno, ele desiste após 15 segundos, que não parece longo o suficiente .
O recurso de discagem por demanda, no entanto, era totalmente uma coisa, o que eu imagino que funcionou na maioria dos casos
without the program even noticing something special went on behind the scenes.
então como eu faria isso
Se você tentar desenterrar o código antigo, tenho certeza de que ele foi usado especificamente para PPP. Isso pode ou não ser útil para determinadas conexões de dados móveis modernas. Mas se não usar o PPP, não funcionará com o código antigo. A rota padrão foi atribuída à interface de rede, por exemplo ppp0
, mas o daemon PPP correspondente foi executado usando a opção ondemand
e, portanto, não fez a conexão até que fosse necessário.