entiendo que el siguiente código puede (quizás no es muy eficiente) descubrir un puerto TCP libre en Java:Encontrar dos puertos TCP gratuitas
public static int findFreePort() {
int port;
try {
ServerSocket socket= new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
} catch (Exception e) { port = -1; }
return port;
}
(Hay algunas preguntas relacionadas aquí en SO - forexample) .
Lo que no entiendo es por qué (o si) dos llamadas sucesivas a este método tienen la garantía de devolver dos puertos diferentes. Esto se supone, por ejemplo, here (busque las llamadas al método findFreePort
).
¿Es esto correcto?
Si tiene preguntas relacionadas, debería citarlas y enlazar a ellas. – Freiheit
@Freiheit: Hecho – leonbloy
No se reasigna debido a SO_WAIT, un mecanismo diseñado para eludir que un paquete aún en tránsito sea recibido por otro proceso.De forma predeterminada, si cierra un puerto TCP, no se reasigna durante los próximos 2 minutos para permitir que estos paquetes persistentes se vacíen. –