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