Javamail在超时时没有完全关闭套接字

时间:2010-10-27 07:43:46

标签: sockets garbage-collection javamail ulimit

通过javamail发送邮件时,会打开一个到smtp服务器的套接字。现在,我们得到了这样的情况:当连接仍处于活动状态且javamail正在等待服务器时,邮件服务器的连接断开(垃圾邮件扫描花了几秒钟)。因此,TCP连接从未真正关闭,客户端陷入僵局。

所以我们决定使用javamails超时,这有效 - 客户端在指定的时间后抛出异常。但是,tcp连接未正确关闭(netstat -np仍将连接显示为“ESTABLISHED”)。只有在我调用System.gc()之后,套接字才会关闭。

这是一个问题,因为在抛出任何OOM异常之前保证gc(),但是在达到FD限制之前没有...

这可以以某种方式被规避或者这是javamail中的错误吗?

受影响的系统:Linux(debian lenny),Sun JDK 1.6.0.20(-XXUseSSE = 3),javamail 1.4.3

1 个答案:

答案 0 :(得分:2)

异常不会导致连接关闭,您必须调用Transport.close() 自己。