1

当通过 javamail 发送邮件时,会打开一个到 smtp 服务器的套接字。现在,我们遇到了这样的情况,即邮件服务器的连接在连接仍然存在并且 javamail 正在等待服务器时断开(垃圾邮件扫描需要几秒钟)。因此,TCP 连接从未真正关闭,客户端死锁。

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

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

这可以以某种方式规避还是这是javamail中的错误?

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

4

1 回答 1

2

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

于 2011-03-24T06:58:06.870 回答