Remember that a socket isn't closed until both stream directions are
shut down. It kinda looks like the remote end has either become
unreachable or isn't implementing TCP active close properly. You're
sending data which it is not ACKing, and it's not sending an RST either.
It may be stuck for some reason, and not calling read().
Does JavaMail provide a way to enable keepalive on its sockets? That
might help.
Joseph Shraibman wrote:
I have a connection to a mail server that was closed from the other
end, but my local jvm is still hanging on to the socket (for like 6 or
7 hours):
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp1 11796 p5b.selectacast.n:45221 213.38.169.138:smtp
CLOSE_WAIT
"MsgSender sending via mail.leebaron.com [213.38.169.138]" prio=1
tid=0x79f74000 nid=0x3ab0 runnable [825b1000..825b1cd8]
at java.net.SocketOutputStream.socketWrite0(Native Method)
at
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at
com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:83)
at
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:66)
at
java.io.BufferedOutputStream.write(BufferedOutputStream.java:79)
- locked <0x4b188b20> (a java.io.BufferedOutputStream)
at
com.sun.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:41)
at
com.sun.mail.smtp.SMTPOutputStream.write(SMTPOutputStream.java:36)
at
com.sun.mail.util.QPEncoderStream.output(QPEncoderStream.java:162)
at
com.sun.mail.util.QPEncoderStream.write(QPEncoderStream.java:109)
at
com.sun.mail.util.QPEncoderStream.write(QPEncoderStream.java:64)
at
sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
at
sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:395)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
- locked <0x4b18abd8> (a java.io.OutputStreamWriter)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:146)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:204)
at com.sun.mail.handlers.text_plain.writeTo(text_plain.java:126)
at
javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:839)
at javax.activation.DataHandler.writeTo(DataHandler.java:295)
at
javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1201)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1611)
at
com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:493)
- locked <0x4b18abf0> (a com.sun.mail.smtp.SMTPTransport)
So how do I get around this problem?
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]