On 7/28/07, Gaston Dombiak <[EMAIL PROTECTED]> wrote:
>
> Hey Trustin,
>
> I noticed many times (specially when behind a NAT device) that sometimes
> when a socket connection was lost/closed it's like the TCP layer does not
> inform the JVM about the event. So the JVM thinks that the socket is fine
> and even after writing some data (before the write queue gets full) the JVM
> will not get any IO exception so it will still think that the socket is
> alive. The only workarounds we applied (at the application level) were 1)
> add heartbeats that will eventually (hopefully) will fill up the write queue
> and get an IO exception or 2) close socket that have not "sent" any data to
> the server. I think that #1 is not 100% safe so #2 will eventually close the
> "assumed" dead connection.


Will setWriteTimeout solve uncaught IO exception problem? Or a
setIdleTime for Read and Write and send ping-pong?

Regards,
>
> -- Gato
>
> ----- Original Message -----
> From: "Trustin Lee" <[EMAIL PROTECTED]>
> To: dev@mina.apache.org
> Sent: Friday, July 27, 2007 10:11:14 AM (GMT-0800) America/Los_Angeles
> Subject: Re: Out Of Memory Problem Again
>
> On 7/28/07, mat <[EMAIL PROTECTED]> wrote:
> > After further research, I found out if one client disconnection was not
> > caught and session.write() kept got called. Which causes the OOM? Is
> that
> > possible?
>
> Yes.  You have to make sure if the connection is alive and write
> operation was successful.  You can check if the connection is alive by
> calling IoSession.isClosing(), and WriteFuture.isWritten() for write
> operations.


Should that be session.isConnected()? However, if disconnection doesn't get
caught, session.isConnected() will never work since you never do
session.close(), right? SetWriteTimeout works for this issue, right? Why
WriteFuture.isWritten()??

HTH,
> Trustin
> --
> what we call human nature is actually human habit
> --
> http://gleamynode.net/
> --
> PGP Key ID: 0x0255ECA6
>
>

Reply via email to