Hi Trustin,<br><br>Thanks for the insight into the reason(s) for the errors. I guess you might be correct, I am closing the connections from the handler (if read timeouts occur). That might be the cause of these exceptions, I will try to re-test it without the timeouts.<br>
<br>I do observe timeouts in my logs, however I am yet to figure out as to why these timeouts occur in the first place. My clients are configured to send a heartbeat message every 20 seconds and ReadTimeout timer is configured to 60 seconds, so timeouts should not occur in the first place. <br>
<br>Will keep you updated with my investigations, meanwhile switching to the latest Netty! :)<br><br>Thanks for the great work!<br><br>Regards,<br><br>Virat<br><br><div class="gmail_quote">On Thu, Jun 18, 2009 at 7:43 PM, &quot;ÀÌÈñ½Â (Trustin Lee)&quot; <span dir="ltr">&lt;<a href="mailto:trustin@gmail.com">trustin@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I did some Googling and found that the exception you mentioned is raised<br>
here in SSLEngineImpl.java:<br>
<br>
 &nbsp; &nbsp;case Record.ct_change_cipher_spec:<br>
 &nbsp; &nbsp; &nbsp; &nbsp;if ((connectionState != cs_HANDSHAKE<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;&amp; connectionState != cs_RENEGOTIATE)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| inputRecord.available() != 1<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| inputRecord.read() != 1) {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fatal(Alerts.alert_unexpected_message,<br>
<div class="im"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;illegal change cipher spec msg, state = &quot;<br>
</div> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+ connectionState);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp; &nbsp; &nbsp;...<br>
<br>
connectionState &#39;6&#39; means &#39;cs_CLOSED&#39;, which means:<br>
<br>
1) Server closed the connection (i.e. you called Channel.close() by<br>
yourself),<br>
2) Client closed the connection, or<br>
3) SSLEngine has shut itself down due to some prior fatal error during<br>
communication.<br>
<br>
The case 2 cannot occur in this problem because the client cannot send<br>
the &#39;change_cipher_spec&#39; message to the closed connection.<br>
<br>
If the case 3 is true, you should have get a prior exception. Did you?<br>
You might want to set a global breakpoint for &#39;SSLException&#39; to make<br>
sure no prior exception was raised.<br>
<br>
If the case 1 is true, it means the client sent the &#39;change_cipher_spec&#39;<br>
message while you try to close the channel, consequently initiating SSL<br>
closure. &nbsp;Could you let me know if the exception is raised when you call<br>
Channel.close()?<br>
<br>
There is possibility that the SSL message has been corrupted for some<br>
reason, but I&#39;m not sure this is the case considering the exception<br>
message you&#39;re getting is always same.<br>
<br>
HTH,<br>
<font color="#888888">Trustin<br>
</font><div><div></div><div class="h5"><br>
On 2009-06-18 ¿ÀÈÄ 10:06, &quot;ÀÌÈñ½Â (Trustin Lee) wrote:<br>
&gt; I tried to reproduce the problem with the following test code. &nbsp;Can you<br>
&gt; reproduce the problem with it?<br>
&gt;<br>
&gt; public class Tester {<br>
&gt;<br>
&gt; &nbsp; &nbsp; public static void main(String[] args) throws IOException {<br>
&gt;<br>
&gt; SSLContext.setDefault(SecureChatSslContextFactory.getClientContext());<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; Socket s =<br>
&gt; SSLSocketFactory.getDefault().createSocket(&quot;127.0.0.1&quot;, 9080);<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; InputStream in = s.getInputStream();<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; OutputStream out = s.getOutputStream();<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; byte[] msg = new byte[] { &#39;H&#39;,&#39;E&#39;, &#39;L&#39;, &#39;L&#39;, &#39;O&#39;, 0x04 };<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0;; i ++) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i % 1000 == 0) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(i);<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out.write(msg);<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //for (;;) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp;int c = in.read();<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp;if (c == 0x04 || c &lt; 0) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp;}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //}<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt; &nbsp; &nbsp; }<br>
&gt; }<br>
&gt;<br>
&gt; Please note that I used the bogus context factory which is provided with<br>
&gt; the Netty SecureChat example. &nbsp;I&#39;m testing against Netty trunk on<br>
&gt; Windows (no access to Solaris at the moment.)<br>
&gt;<br>
&gt; Please feel free to modify the tester and let me know if you succeeded<br>
&gt; to reproduce the problem.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Trustin<br>
&gt;<br>
&gt; On 2009-06-18 ¿ÀÈÄ 9:41, Virat Gohil wrote:<br>
&gt;&gt; Hi Trustin,<br>
&gt;&gt;<br>
&gt;&gt; some more information about my setup:<br>
&gt;&gt;<br>
&gt;&gt; I have about 3000 NE (Client), which connect to the server. The<br>
&gt;&gt; connections are persistent, i.e the connections are never meant to be<br>
&gt;&gt; closed. you may keep the connections open forever. and send a message<br>
&gt;&gt; from the client every 20 seconds.<br>
&gt;&gt;<br>
&gt;&gt; As soon as the client&#39;s connection is accepted (i.e TCP handshake is<br>
&gt;&gt; finished), the client will start sending the messages from its queue, on<br>
&gt;&gt; an average the queue size would be 5 messages. so you may want to<br>
&gt;&gt; replicate this behavior as well.<br>
&gt;&gt;<br>
&gt;&gt; E.g:<br>
&gt;&gt; 1. Client connects to the server.<br>
&gt;&gt; 2. Client sends Message M1, waits for the server to acknowledge the<br>
&gt;&gt; message (timeout is 5 secs).<br>
&gt;&gt; 3. if the server fails to acknowledge the message within 5 seconds, then<br>
&gt;&gt; the client re-sends the same message. Else sends the next message.<br>
&gt;&gt; 4. The acknowledgment from server to client is at application level, you<br>
&gt;&gt; may replicate by echoing the same message.<br>
&gt;&gt;<br>
&gt;&gt; I am running Sun Solaris 10, with Sun&#39;s hotspot JVM 1.5.<br>
&gt;&gt;<br>
&gt;&gt; Please let me know if you need more information on my setup.<br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt;<br>
&gt;&gt; Virat<br>
&gt;&gt;<br>
&gt;&gt; I will either find a way or make one.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Jun 18, 2009 at 6:04 PM, &quot;ÀÌÈñ½Â (Trustin Lee)&quot;<br>
&gt;&gt; &lt;<a href="mailto:trustin@gmail.com">trustin@gmail.com</a> &lt;mailto:<a href="mailto:trustin@gmail.com">trustin@gmail.com</a>&gt;&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; &nbsp; Do I need to keep handshaking making a new connection every time for 20<br>
&gt;&gt; &nbsp; &nbsp; minutes, or just keep the connection open and keep sending messages?<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; &nbsp; On 2009-06-18 ¿ÀÈÄ 8:45, Virat Gohil wrote:<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; Hi All,<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; I am getting the following exception after about 20 minutes of<br>
&gt;&gt; &nbsp; &nbsp; running time<br>
&gt;&gt; &nbsp; &nbsp; &gt; using my server:<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp;EXCEPTION: javax.net.ssl.SS<br>
&gt;&gt; &nbsp; &nbsp; &gt; LException: illegal change cipher spec msg, state = 6<br>
&gt;&gt; &nbsp; &nbsp; &gt; javax.net.ssl.SSLException: illegal change cipher spec msg, state = 6<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown<br>
&gt;&gt; &nbsp; &nbsp; &gt; Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; com.sun.net.ssl.internal.ssl.SSLEngineImpl.readRecord(Unknown<br>
&gt;&gt; &nbsp; &nbsp; &gt; Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord(Unknown<br>
&gt;&gt; &nbsp; &nbsp; &gt; Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap(Unknown Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at javax.net.ssl.SSLEngine.unwrap(Unknown Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt; org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:699)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt; org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:445)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:244)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:184)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:87)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:344)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:331)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt; org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:303)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:255)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt; org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:176)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:49)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at<br>
&gt;&gt; &nbsp; &nbsp; java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown<br>
&gt;&gt; &nbsp; &nbsp; &gt; Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown<br>
&gt;&gt; &nbsp; &nbsp; &gt; Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt; &nbsp; &nbsp; &nbsp; &nbsp; at java.lang.Thread.run(Unknown Source)<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; I am attaching an example server along with this email, the<br>
&gt;&gt; &nbsp; &nbsp; clients may send<br>
&gt;&gt; &nbsp; &nbsp; &gt; any random string with ascii char (0x04) as delimiter.<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; <a href="http://n2.nabble.com/file/n3104250/NioServer.tar.bz2" target="_blank">http://n2.nabble.com/file/n3104250/NioServer.tar.bz2</a> NioServer.tar.bz2<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; Kindly suggest a solution or cause to this issue.<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; Thanks,<br>
&gt;&gt; &nbsp; &nbsp; &gt;<br>
&gt;&gt; &nbsp; &nbsp; &gt; Virat<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; &nbsp; --<br>
&gt;&gt; &nbsp; &nbsp; &mdash; Trustin Lee, <a href="http://gleamynode.net/" target="_blank">http://gleamynode.net/</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt;&gt; &nbsp; &nbsp; netty-users mailing list<br>
&gt;&gt; &nbsp; &nbsp; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a> &lt;mailto:<a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a>&gt;<br>
&gt;&gt; &nbsp; &nbsp; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ------------------------------------------------------------------------<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; netty-users mailing list<br>
&gt;&gt; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; netty-users mailing list<br>
&gt; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
<br>
<br>
--<br>
&mdash; Trustin Lee, <a href="http://gleamynode.net/" target="_blank">http://gleamynode.net/</a><br>
<br>
</div></div><br>_______________________________________________<br>
netty-users mailing list<br>
<a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
<br></blockquote></div><br>