Socket.connect() до 0.0.0.0: Windows против Mac
Представьте себе следующий код:
String hostName = "0.0.0.0";
int port = 10002;
int timeout = 5000;
Socket socket = new Socket();
socket.connect(new InetSocketAddress(hostName, port), timeout);
На Mac он работает нормально и выполняет подключение (даже при отсутствии порта 10002), а в Windows я получаю следующее исключение:
java.net.SocketException: Permission denied: connect
Какая здесь разница и какая альтернатива на Windows? Это используется в модульных тестах.
С уважением
Jonas
1 ответ
На всякий случай, если кто-то еще наткнется на этот вопрос, я отвечаю на него.
К сожалению, подключение к любому адресу не разрешено в Windows.
Функция Winsock connect возвращает код ошибки WSAEADDRNOTAVAIL[Удаленный адрес не является допустимым адресом (например, INADDR_ANY или in6addr_any)], как указано в Документации по API Windows:
Если элемент адреса в структуре, указанной параметром name, заполнен нулями, connect вернет ошибку WSAEADDRNOTAVAIL.
Поэтому, не используя какой-либо адрес локального хоста, я думаю, что то, что вы пытаетесь сделать, будет невозможно в Windows (хотя мне интересно, является ли поведение Unix ошибочным или преднамеренным).
Я бы предложил настроить больше петлевых интерфейсов, как предложил Марк Рид в своем комментарии.