Отказоустойчивое исходящее TCP-соединение Java на основе нескольких результатов DNS - PullRequest
4 голосов
/ 10 января 2011

Если я устанавливаю соединение, используя new Socket("unit.domain.com", 100) и запись DNS unit.domain.com имеет несколько IP-адресов в записи A. В случае неудачного подключения Java автоматически подключается к одному из других адресов в списке как браузер делает? или это должно быть реализовано вручную?

1 Ответ

5 голосов
/ 10 января 2011

Нет!Создание сокета с помощью нового Socket (String, int) приводит к разрешению, подобному этому

addr = InetAddress.getByName(hostname);

, которое является ярлыком для

return InetAddress.getAllByName(host)[0];

Разрешение адреса выполняется в Socket c-tor.

Если вам необходимо восстановить соединение (аварийное переключение), используйте результат, возвращенный InetAddress.getAllByName (host), рандомизируйте (или используйте циклический перебор) и подключитесь к нужным адресам.

Редактировать: также, если вам понадобится соединиться с какой-то вероятной ошибкой, вам лучше использовать метод connect класса Socket с тайм-аутом. Также убедитесь, что вы закрываете даже неисправные сокеты (и особенно каналы), так как они могут пропустить FD на * Nix.

...