Uma convenção típica no UNIX é que os programas (geralmente) leem sua configuração de inicialização de vários arquivos predefinidos. Isso é apenas uma tradição, não nada definido pelo POSIX ou qualquer outro padrão. Um programa UNIX típico, por exemplo, foobarseria lido, na seguinte ordem de precedência:
~/.foobarrc ## User specific configuration parameters
/etc/foobarrc ## Global parameters, depending on taste
## `/etc/foobar/*(.conf)' might be chosen too
Pode haver um retorno, /usr/share/mas isso não é muito comum.
Então, curlaqui , seguindo a convenção e lendo sua configuração inicial ~/.curlrc. E, ao fazer isso echo ipv4 >>~/.curlrc, você anexou a string ipv4ao arquivo ~/.curlrc.
A string ipv4tem um significado especial para curl- curlusará o IPv4 para a resolução do host. Isto é análogo a usar -4/ ipv4como curlargumento de linha de comando, mas salvando a ~/.curlrctorna este permanentes.
Como você definiu ipv4lá e agora tudo funciona para você, presumivelmente você tem o IPv6 configurado e curlestava usando o IPv6 anteriormente para a resolução (bem-sucedida) do host, portanto, não há substituto para o IPv4. A conexão com o site estava falhando porque nem todos os sites têm seus servidores da Web configurados para escutar nos endereços IPv6; portanto, a socket()chamada falharia como podemos ver neste caso.