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 


Reply via email to