Javamail не полностью закрывает сокет по таймауту - PullRequest
1 голос
/ 27 октября 2010

При отправке почты через javamail открывается сокет к серверу smtp.Теперь мы получили случай, когда соединение почтового сервера оборвалось, когда соединение было еще живым, а javamail ожидал сервера (сканирование спама заняло несколько секунд).Поэтому TCP-соединение никогда не было закрыто, а клиент заблокирован.

Поэтому мы решили использовать тайм-ауты javamails, которые работают - клиент выдает исключение по истечении указанного времени.Однако tcp-соединение НЕ закрыто правильно (netstat -np по-прежнему показывает соединение как «ESTABLISHED»).Только после того, как я вызову System.gc (), сокет закрывается.

Это проблема, потому что gc () гарантируется до того, как будет сгенерировано любое исключение OOM, но не до того, как будет достигнут предел FD...

Можно ли это как-то обойти или это ошибка в javamail?

Затрагиваемая система: Linux (debian lenny), Sun JDK 1.6.0.20 (с -XXUseSSE = 3), javamail1.4.3

1 Ответ

2 голосов
/ 24 марта 2011

Исключение не приводит к закрытию соединения, необходимо вызвать Transport.close () сами.

...