В двух словах: в первый раз, когда процесс пытается использовать соединение, если он терпит неудачу из-за отсутствия доступных соединений, этот единственный процесс никогда не восстановит способность использовать сеть. Я должен убить и перезапустить его.
У меня есть скрипт ruby, который пытается разрешить "google.com" три раза. Если я отключу работу в сети (через NetworkManager) или отключу свой физический WLAN-коммутатор, запустите сценарий, дайте ему один раз произойти сбой, а затем снова включите сеть, остальные два разрешения также не будут выполнены, даже если у остальной системы есть сеть.
Подобный скрипт Python демонстрирует те же результаты, что и браузерная рысь. Не Firefox, хотя! Все эти варианты поведения протестированы как на виртуальной машине, так и на физической машине с последней версией Manjaro x64 XFCE. На последней версии Ubuntu x64 те же тесты работают нормально.
Почему это происходит? Это ошибка, особенность, причуды?
РЕДАКТИРОВАТЬ:
На Manjaro содержимое /etc/resolv.conf
регенерируется с помощью resolvconf.
- Сеть включена:
search lan; nameserver 192.168.1.1
- Сеть отключена: пустой файл
Ruby/Python/Lynx должен читать resolv.conf
только один раз. Таким образом, при первом запросе он находит пустой файл и больше никогда не может разрешить имена.
И в Ubuntu, /etc/resolv.conf
:
- Сеть включена:
nameserver 127.0.1.1; search lan
- Сеть отключена:
nameserver 127.0.1.1
Поэтому, когда Ruby/Python/Lynx прочитает его в отключенной сети, у них все равно останется сервер имен, с которым можно будет связаться при восстановлении соединения. Проблема с настройкой Manjaro заключается в том, что без подключения нет серверов имен. Ubuntu запускает dnsmasq для 127.0.1.1, а Manjaro - нет.