Usando glibc, porque meu gethostbyname falhar após I / DHCP mudou o servidor DNS?

StackOverflow https://stackoverflow.com/questions/125466

  •  02-07-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top