Чего я хотел бы достичь
привязать сервер к временному порту для целей модульного тестирования.
Моя проблема:
Использование версии 1.5.0_22 JDK Я пытаюсь привязать InetSocketAddress к эфемерному порту, используя порт 0 в соответствии с javadoc, но я не могу найти способ из адресного объекта узнать, к какому порту он привязан, поэтому я не могу настроить своих клиентов соответствующим образом:
InetSocketAddress address = new InetSocketAddress(0);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));
Я могу неправильно понять предложение javadoc:
Допустимое значение порта находится в диапазоне от 0 до 65535. Нулевой номер порта позволит системе выбрать временный порт в операции привязки.
Но проверка порта даже после того, как мой сервер прослушивает сокет (я предполагаю, что тогда произошло связывание) не возвращает ничего, кроме 0 (в следующем примере используется http: //simpleweb.sourceforge. net / library):
Container httpServer = new Container() {
public void handle(Request req, Response resp) {
}
};
SocketConnection connection = new SocketConnection(httpServer);
InetSocketAddress address = new InetSocketAddress(0);
connection.connect(address);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));
Используя nmap, я даже не вижу привязанного порта, поэтому предполагаю, что мое понимание неверно. Есть помощь?