Usando glibc, porque meu gethostbyname falhar após I / DHCP mudou o servidor DNS?
Pergunta
Se o nosso servidor (rodando em um dispositivo) começa antes de uma concessão de DHCP tinha sido adquirido em seguida, ele nunca pode se conectar usando um nome de host.
Se isso acontece, pode encontrar anfitriões por endereço IP, mas não de DNS.
Inicialmente eu pensei que o cache DNS onda estava em falta, como as conexões onda falhou. Mas eu costumava CURLOPT_DNS_CACHE_TIMEOUT para prevenir onda de cache endereço, mas as ligações ainda não conseguiu.
Solução
Acontece que gethostbyname_r glibc não irá recarregar automaticamente a sua configuração se que as alterações de configuração. Você tem que res_init chamada manualmente. Consulte bug relatório abaixo.
Nota:. Nem a página man para gethostbyname_r nem para rer_init mencionado essa limitação
A minha solução é muito específico. Ele trabalha para o nosso servidor de longa duração, mas não é a minha solução ideal.
Eu tenho uma função que verifica o mtime do /etc/resolv.conf contra a última mtime conhecida (0 para DNE). Se os dois mtime diferem em seguida, eu chamo res_init. Esta função é chamada de inicialização do programa e, em seguida, periodicamente, para opcionalmente recarregar a configuração.
O glibc relatório de bug
libc caches resolv.conf para sempre
...
Isso é o que res_init () é para, chamá-lo.