Si abrir y cerrar un socket llamando por ejemplo¿Hay una fuga de descriptor de archivo cuando se usan sockets en una plataforma Linux?
Socket s = new Socket(...);
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Linux afirma que esta toma está todavía abierto o al menos el descriptor de archivo para la conexión es presen. Cuando se consultan los archivos abiertos para este proceso mediante lsof, hay una entrada para la conexión cerrada:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4 93417 can't identify protocol
Esta entrada se mantiene hasta que el programa se cierra. ¿Hay alguna otra manera de finalmente cerrar el zócalo? Estoy un poco preocupado de que mi aplicación java pueda bloquear muchos descriptores de archivos. es posible? ¿O Java mantiene estas tomas para reutilizarlas incluso si ReuseAdress está configurado?
De acuerdo, esto es lo primero que debe verificar. Y después de unos minutos, los enchufes deberían desaparecer, antes de que su programa termine necesariamente. –
El autor declara que las entradas permanecen hasta que el programa se cierra, aunque supongo que no especifica si eso es más que unos pocos minutos. –
Sí, vi el programa "cierra el programa", pero no estaba seguro. –