Типичное соглашение в UNIX состоит в том, что программы (обычно) читают свою конфигурацию запуска из различных предопределенных файлов. Это просто традиция, а не что-либо определенное POSIX или любым другим стандартом. Типичная программа UNIX, например, foobarбудет читать в следующем порядке приоритета:
~/.foobarrc ## User specific configuration parameters
/etc/foobarrc ## Global parameters, depending on taste
## `/etc/foobar/*(.conf)' might be chosen too
Там может быть запасной вариант, /usr/share/но это не очень распространено.
Итак, curlздесь следуем соглашению и читаем его исходную конфигурацию из ~/.curlrc. И тем самым echo ipv4 >>~/.curlrcвы добавили строку ipv4в файл ~/.curlrc.
Строка ipv4имеет особое значение для curl- curlбудет использовать IPv4 для разрешения хоста. Это аналогично использованию аргумента -4/ ipv4as curlиз командной строки, но сохранение ~/.curlrcэтого параметра делает его постоянным.
Поскольку вы установили ipv4там и теперь все работает для вас, вероятно, у вас настроен IPv6, и curlранее вы использовали IPv6 для (успешного) разрешения хоста, поэтому нет возврата к IPv4. Соединение с сайтом было неудачным, потому что не на всех сайтах настроены веб-серверы для прослушивания IPv6-адресов, поэтому socket()вызов не будет выполнен, как мы видим в этом случае.