You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Robert li <ro...@eatmeals.ca> on 2016/02/18 07:59:55 UTC
Tomcat 8.0.32 WebSocket failed to close the ServletOutputStream
connection cleanly
Dear Tomcat developers:
We are using Tomcat 8.0.32 on SSL with WebSocket. We found a lot of IOException in our catalina.out file.
It looks like this:
17-Feb-2016 03:24:16.415 INFO [http-nio-8443-exec-5] org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doClose Failed to close the ServletOutputStream connection cleanly
java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:51)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at org.apache.tomcat.util.net.SecureNioChannel.flush(SecureNioChannel.java:140)
at org.apache.tomcat.util.net.SecureNioChannel.close(SecureNioChannel.java:385)
at org.apache.tomcat.util.net.SecureNioChannel.close(SecureNioChannel.java:413)
at org.apache.coyote.http11.upgrade.NioServletOutputStream.doClose(NioServletOutputStream.java:138)
at org.apache.coyote.http11.upgrade.AbstractServletOutputStream.close(AbstractServletOutputStream.java:140)
at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doClose(WsRemoteEndpointImplServer.java:143)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.close(WsRemoteEndpointImplBase.java:663)
at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:594)
at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:488)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.onError(WsHttpUpgradeHandler.java:150)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.access$300(WsHttpUpgradeHandler.java:48)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsWriteListener.onError(WsHttpUpgradeHandler.java:238)
at org.apache.coyote.http11.upgrade.AbstractServletOutputStream.onError(AbstractServletOutputStream.java:239)
at org.apache.coyote.http11.upgrade.AbstractServletOutputStream.onWritePossible(AbstractServletOutputStream.java:200)
at org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:98)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:647)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1452)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
More information:
OS Name: Linux
OS Version: 3.14.35-28.38.amzn1.x86_64
JVM Version: 1.8.0_71-b15
JVM Vendor: Oracle Corporation
Based on our test, it is happened when users use mobile phone to open WebSocket, then cut off the WiFi (e.g. open airplane mode). After that, the server doesn't know the connection has fail.
This Exception only happened when we use SSL. If we change wss to ws, the issue doesn't occur.
Is it a bug of Tomcat 8? Should you fix this problem in the future?
Cheers,
Robert Li
2016/2/17