Если я открываю и закрываю сокет, вызывая, например,
Socket s = new Socket( ... );
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Linux заявляет, что этот сокет все еще открыт или, по крайней мере, представлен дескриптор файла для соединения. При запросе открытых файлов для этого процесса с помощью lsof, есть запись для закрытого соединения:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4 93417 can't identify protocol
Эта запись сохраняется до закрытия программы. Есть ли другой способ окончательно закрыть сокет?
Я немного обеспокоен тем, что мое Java-приложение может блокировать многие файловые дескрипторы. Это возможно? Или java сохраняет эти сокеты для повторного использования, даже если установлен ReuseAdress?