Почему connect () выдавал EADDRNOTAVAIL?

В моем приложении возникла ошибка, которая, кажется, не воспроизводима. У меня есть соединение с TCP-сокетом, которое не удалось, и приложение попыталось восстановить его. Во втором вызове connect () при попытке повторного подключения я получил результат ошибки с errno == EADDRNOTAVAIL, что на странице руководства для connect () означает: «Указанный адрес недоступен с локальной машины».

Глядя при вызове connect (), второй аргумент, по-видимому, является адресом, к которому относится ошибка, но, насколько я понимаю, этот аргумент является адресом TCP-сокета удаленного хоста, поэтому меня смущает справочная страница, относящаяся к локальной машине. Может быть, этот адрес удаленного хоста TCP-сокета недоступен с моего локального компьютера? Если да, то почему? Он должен был успешно вызвать connect () в первый раз, прежде чем соединение не удалось, и он попытался восстановить соединение и получил эту ошибку. Аргументы для connect () оба раза были одинаковыми.

Была бы эта ошибка временной, которая, если бы я попытался снова вызвать connect, могла бы исчезнуть, если бы я ждал достаточно долго? Если нет, как мне попытаться восстановиться после этого сбоя?

13
задан Matt 2 July 2013 в 20:49
поделиться