Я понимаю, что следующий код может (возможно, не очень эффективно) найти свободный TCP-порт в Java:Нахождение двух свободных портов TCP
public static int findFreePort() {
int port;
try {
ServerSocket socket= new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
} catch (Exception e) { port = -1; }
return port;
}
(Есть некоторые смежные вопросы здесь SO - forexample) ,
То, что я не понимаю, - это то, почему (или есть) два успешных вызова этого метода гарантированно возвратят два разных порта. Предполагается, например, here (поиск звонков на метод findFreePort
).
Это правильно?
Если есть связанные вопросы, вы должны указать их и ссылаться на них. – Freiheit
@Freiheit: Done – leonbloy
Он не перераспределен из-за SO_WAIT, механизма, призванного обойти, что пакет, все еще находящийся в пути, будет получен другим процессом.По умолчанию, вы закрываете порт TCP, он не перераспределяется в течение следующих 2 минут, чтобы эти затяжные пакеты были сброшены. –