the error 'Connection reset by peer' can happen to a regular servlet as well, and is not specific to Comet. you will need to handle any errors where clients disconnect (as they are allowed to) in your application, regardless if you write comet or regular servlets.

for the error
'org.apache.coyote.http11.InternalNioOutputBuffer.access$000(InternalNioOutputBuffer.java:46)
org.apache.coyote.http11.InternalNioOutputBuffer$SocketOutputBuffer.doWrite(InternalNioOutputBuffer.java:803)'

try the .17 candidate,
http://people.apache.org/~remm/tomcat-6/v6.0.17/bin/

as for the async close patch, doesn't apply in your scenario if I read it correctly. you call CometEvent.close during an event, and that is not async, so it should close it fine

Filip

John Chilton wrote:
Hello All,

So I have a piece of code that writes something out to the
ServletOutputStream associated with a Comet Event, flushes the stream,
and then calls cometEvent.close() in response to an END event. This
whole process in synchronized. Today while attempting to flush the
stream, an exception was thrown...

Here is a log of the exception:

ClientAbortException:  java.io.IOException: Connection reset by peer
       at 
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:319)
       at 
org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:288)
       at 
org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
       at rocket.remoting.server.CometConnection.flush(CometConnection.java:137)
       at rocket.remoting.server.CometConnection.close(CometConnection.java:115)
       at 
edu.umn.msi.tropix.webgui.server.comet.CometManagerImpl.close(CometManagerImpl.java:271)
       at 
edu.umn.msi.tropix.webgui.server.comet.CometManagerImpl.close(CometManagerImpl.java:291)
       at 
edu.umn.msi.tropix.webgui.server.comet.TomcatServlet.event(TomcatServlet.java:43)
       at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:470)
       at 
org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:363)
       at 
org.apache.catalina.core.StandardWrapperValve.event(StandardWrapperValve.java:422)
       at 
org.apache.catalina.core.StandardContextValve.event(StandardContextValve.java:252)
       at 
org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:179)
       at org.apache.catalina.valves.ValveBase.event(ValveBase.java:200)
       at 
org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:128)
       at 
org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:198)
       at 
org.apache.coyote.http11.Http11NioProcessor.event(Http11NioProcessor.java:749)
       at 
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.event(Http11NioProtocol.java:653)
       at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2080)
       at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
       at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
       at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.IOException: Connection reset by peer
       at sun.nio.ch.FileDispatcher.write0(Native Method)
       at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29)
       at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
       at sun.nio.ch.IOUtil.write(IOUtil.java:60)
       at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)
       at 
org.apache.tomcat.util.net.SecureNioChannel.flush(SecureNioChannel.java:124)
       at 
org.apache.tomcat.util.net.SecureNioChannel.write(SecureNioChannel.java:431)
       at 
org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:92)
       at 
org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:156)
       at 
org.apache.coyote.http11.InternalNioOutputBuffer.writeToSocket(InternalNioOutputBuffer.java:440)
       at 
org.apache.coyote.http11.InternalNioOutputBuffer.flushBuffer(InternalNioOutputBuffer.java:770)
       at 
org.apache.coyote.http11.InternalNioOutputBuffer.flush(InternalNioOutputBuffer.java:300)
       at 
org.apache.coyote.http11.Http11NioProcessor.action(Http11NioProcessor.java:1051)
       at org.apache.coyote.Response.action(Response.java:183)
       at 
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:314)
       ... 21 more

When my code then attempted to close the CometEvent, the thread hung.
The stack trace of the stuck thread looks like this:

org.apache.coyote.http11.InternalNioOutputBuffer.access$000(InternalNioOutputBuffer.java:46)
org.apache.coyote.http11.InternalNioOutputBuffer$SocketOutputBuffer.doWrite(InternalNioOutputBuffer.java:803)
org.apache.coyote.http11.filters.ChunkedOutputFilter.end(ChunkedOutputFilter.java:164)
org.apache.coyote.http11.InternalNioOutputBuffer.endRequest(InternalNioOutputBuffer.java:390)
org.apache.coyote.http11.Http11NioProcessor.action(Http11NioProcessor.java:1079)
org.apache.coyote.Response.action(Response.java:183)
org.apache.coyote.Response.finish(Response.java:305)
org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:276)
org.apache.catalina.connector.Response.finishResponse(Response.java:492)
org.apache.catalina.connector.CometEventImpl.close(CometEventImpl.java:96)
edu.umn.msi.tropix.webgui.server.comet.CometManagerImpl.close(CometManagerImpl.java:279)
edu.umn.msi.tropix.webgui.server.comet.CometManagerImpl.close(CometManagerImpl.java:291)
edu.umn.msi.tropix.webgui.server.comet.TomcatServlet.event(TomcatServlet.java:43)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:470)
org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:363)
org.apache.catalina.core.StandardWrapperValve.event(StandardWrapperValve.java:422)
org.apache.catalina.core.StandardContextValve.event(StandardContextValve.java:252)
org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:179)
org.apache.catalina.valves.ValveBase.event(ValveBase.java:200)
org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:128)
org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:198)
org.apache.coyote.http11.Http11NioProcessor.event(Http11NioProcessor.java:749)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.event(Http11NioProtocol.java:653)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2080)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
java.lang.Thread.run(Thread.java:595)

I guess I have several questions, the most practical is - will not
attempting to close the comet event after an exception while flushing
prevent this thread for hanging or will the underlying problem still
prevent close from halting.

My second question is, is this behavior to be expected, is it a bug,
or am I doing something wrong?

Would this patch
http://people.apache.org/~fhanik/patches/comet-async-close.patch "fix"
this?

Finally, I previously had a similar problem with threads hanging when
a library I make use of was closing the ServletOutputStream associated
with a CometEvent and then my code would attempt to close the
CometEvent afterward. This would also randomly hang. Are these
problems related?

Thanks for any help.

-John Chilton

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to