Error with WebSocket connection
wesleyhales May 14, 2012 7:46 PMWhat up folks! I'm Getting multiple errors when connecting from 2 separate tabs within the same (chrome) web browser.
14:04:52,892 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[com.onslyde.websockets.PresentationHandler]] (http-/172.24.110.175:8080-1) Servlet.service() for servlet com.onslyde.websockets.PresentationHandler threw exception: org.apache.tomcat.jni.Error: Socket operation on non-socket at org.apache.tomcat.jni.Socket.sendbb(Native Method) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:854) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.InternalAprOutputBuffer.flush(InternalAprOutputBuffer.java:316) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.Http11AprProcessor.action(Http11AprProcessor.java:1062) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.Response.action(Response.java:190) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:347) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:316) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98) [jbossweb-7.0.16.Final.jar:] at org.jboss.websockets.oio.internal.protocol.ietf13.Hybi13Socket._writeTextFrame(Hybi13Socket.java:181) [jboss-as-websockets-0.2.Alpha1.jar:] at org.jboss.websockets.oio.internal.protocol.ietf13.Hybi13Socket.writeFrame(Hybi13Socket.java:255) [jboss-as-websockets-0.2.Alpha1.jar:] at org.jboss.as.websockets.servlet.WebSocketDelegate.writeFrame(WebSocketDelegate.java:41) [jboss-as-websockets-0.2.Alpha1.jar:] at com.onslyde.websockets.PresentationHandler.onReceivedFrame(PresentationHandler.java:113) [classes:] at org.jboss.as.websockets.servlet.WebSocketServlet.event(WebSocketServlet.java:166) [jboss-as-websockets-0.2.Alpha1.jar:] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:494) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:399) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.event(StandardWrapperValve.java:464) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardContextValve.event(StandardContextValve.java:183) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.valves.ValveBase.event(ValveBase.java:193) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.valves.ValveBase.event(ValveBase.java:193) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:259) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.valves.ValveBase.event(ValveBase.java:193) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:128) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:265) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.Http11AprProcessor.event(Http11AprProcessor.java:780) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.event(Http11AprProtocol.java:587) [jbossweb-7.0.16.Final.jar:] at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2033) [jbossweb-7.0.16.Final.jar:] at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_31] 14:04:57,681 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[com.onslyde.websockets.PresentationHandler]] (http-/172.24.110.175:8080-1) Servlet.service() for servlet com.onslyde.websockets.PresentationHandler threw exception: java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.startUpgrade(ResponseFacade.java:461) [jbossweb-7.0.16.Final.jar:] at org.jboss.as.websockets.servlet.WebSocketServlet$2.startUpgrade(WebSocketServlet.java:137) [jboss-as-websockets-0.2.Alpha1.jar:] at org.jboss.websockets.oio.WebSocketConnectionManager.establish(WebSocketConnectionManager.java:39) [jboss-as-websockets-0.2.Alpha1.jar:] at org.jboss.as.websockets.servlet.WebSocketServlet.event(WebSocketServlet.java:144) [jboss-as-websockets-0.2.Alpha1.jar:] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:494) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:399) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:273) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.16.Final.jar:] at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.16.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:897) [jbossweb-7.0.16.Final.jar:] at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:634) [jbossweb-7.0.16.Final.jar:] at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2039) [jbossweb-7.0.16.Final.jar:] at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_31]
Here's some hacked together code to reproduce the error:
private Set<WebSocket> websockets = new HashSet<WebSocket>(); @Override protected void onSocketOpened(WebSocket socket) throws IOException { System.out.println("Websocket opened :)"); getWebsockets().add(socket); } @Override protected void onSocketClosed(WebSocket socket) throws IOException { System.out.println("Websocket closed :("); getWebsockets().remove(socket); } @Override protected void onReceivedFrame(WebSocket socket) throws IOException { final Frame frame = socket.readFrame(); if (frame instanceof TextFrame) { final String data = ((TextFrame) frame).getText(); String clientString = ("foo"); for (WebSocket asocket : getWebsockets()) { System.out.println("!!!!!!!!!!!!!!!!!!" + asocket.getSocketID()); try{ System.out.println("!!!!!!!!!!!!!!!!!!asocket: " + asocket); asocket.writeFrame(TextFrame.from(clientString)); Class cls = asocket.getClass(); System.out.println("The type of the object is: " + cls.getName()); }catch (Exception e){ System.out.println("!!!!!!!!!!!!!!!!!!you get not a socket error: " + e); //still happens with below getWebsockets().remove(asocket); } } } } private Set<WebSocket> getWebsockets() { return websockets; }