如果我通过调用如下代码打开和关闭一个套接字:
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应用程序可能会阻塞太多文件描述符。这种情况可能吗?或者即使设置了ReuseAdress,Java也会保留这些套接字以便重复使用吗?