java - 在 linux 平台上使用套接字时是否存在文件描述符泄漏?

标签 java linux sockets file-descriptor

如果我通过调用打开和关闭套接字

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 是否保留这些套接字以重新使用它们?

最佳答案

如果那些套接字都处于TIME_WAIT状态,这是正常的,至少有一小段时间是这样。用 netstat 检查一下;套接字通常会挂起几分钟,以确保在为新套接字重新使用端口之前成功丢弃来自套接字的散乱数据。

关于java - 在 linux 平台上使用套接字时是否存在文件描述符泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429762/

相关文章:

javascript - nodejs 错误 : Parse Error at Socket. ondata

java - Hibernate 的通用 get 方法

linux - 在 jenkinsfile 中使用命令 sh 的正确语法

java - 如何估计或计算 ArrayBlockingQueue 的大小

linux - 在 Linux shell 脚本中使用多个命令解释器

c++ - 创建允许挂载目录的程序

sockets - Log4cplus:SocketAppender 是否有加密选项?

java - 互联网断开之前的广播接收器

jsp内的Java函数错误

java - 卡夫卡流: Read from ALL partitions in every instance of an application