<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;" dir="ltr">
<p></p>
<ol style="margin-bottom: 0px; margin-top: 0px;">
<li><span style="font-size: 12pt;"></span><span style="font-size: 12pt;">lws 2.2 made no difference</span><br>
</li><li><span style="font-size: 12pt;">i took a wireshark capture and found out the server indeed was sending a FIN to the client. But the same server if I don't reuse the context, it works, no spurious FIN. The server is running a java version of websockets.  Any
 idea why context reuse could be screwing up the server? i assume some state somewhere in the context. </span></li></ol>
<p></p>
<p><br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Andy Green <andy@warmcat.com><br>
<b>Sent:</b> Wednesday, June 14, 2017 6:17 PM<br>
<b>To:</b> Ash 20001; libwebsockets@ml.libwebsockets.org<br>
<b>Subject:</b> Re: [Libwebsockets] Is there a way to reuse a lws_context without destroying it</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText"><br>
<br>
On June 15, 2017 9:08:26 AM GMT+08:00, Ash 20001 <ash20001@hotmail.com> wrote:<br>
>I got the logs with the DEBUG flag on, does this mean the server closed<br>
>the connection?<br>
><br>
>1003 :  2017/6/14 18:05:19.590DBG  :  [5708] lws:<br>
>lws_header_table_attach: wsi 0x7fddf002de00: ah 0x7fddf0009f70: count 1<br>
>(on exit)<br>
>1004 :  2017/6/14 18:05:19.590DBG  :  [5708] lws: lws_client_connect:<br>
>direct conn<br>
>1005 :  2017/6/14 18:05:19.590DBG  :  [5708] lws: lws_client_connect_2<br>
>1006 :  2017/6/14 18:05:19.590DBG  :  [5708] lws: lws_client_connect_2:<br>
>address 105.145.65.86<br>
>1022 :  2017/6/14 18:05:19.593DBG  :  [5708] lws:<br>
>insert_wsi_socket_into_fds: 0x7fddf002de00: tsi=0, sock=14,<br>
>pos-in-fds=2<br>
>1023 :  2017/6/14 18:05:19.593DBG  :  [5708] lws:<br>
>LWS_CALLBACK_WSI_CREATE<br>
>1024 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: nonblocking connect<br>
>retry<br>
>1025 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: wsc loop starting<br>
>1026 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: service_fd: closing<br>
>due to 0 length read<br>
<br>
This is how lws learns the peer closed the connection.<br>
<br>
You can use tcpdump or so to look at the packets that were exchanged if it's not SSL.<br>
<br>
-Andy<br>
<br>
>1027 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: Close and handled<br>
>1028 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: lws_close_free_wsi:<br>
>shutting down connection: 0x7fddf001f910<br>
>1029 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: service_fd: closing<br>
>due to 0 length read<br>
>1030 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: Close and handled<br>
>1031 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: lws_close_free_wsi:<br>
>real just_kill_connection: 0x7fddf001f910<br>
>1032 :  2017/6/14 18:05:19.593DBG  :  [5708] lws:<br>
>remove_wsi_socket_from_fds: wsi=0x7fddf001f910, sock=13, fds pos=1, end<br>
>guy pos=3, endfd=0<br>
>1033 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: calling back CLOSED<br>
>1034 :  2017/6/14 18:05:19.593DBG  :  [5708] lws: LWS_CALLBACK_CLOSED<br>
><br>
><br>
><br>
><br>
>________________________________<br>
>From: Andy Green <andy@warmcat.com><br>
>Sent: Wednesday, June 14, 2017 3:53 PM<br>
>To: Ash 20001; libwebsockets@ml.libwebsockets.org<br>
>Subject: Re: [Libwebsockets] Is there a way to reuse a lws_context<br>
>without destroying it<br>
><br>
><br>
><br>
>On June 15, 2017 6:45:33 AM GMT+08:00, Ash 20001 <ash20001@hotmail.com><br>
>wrote:<br>
>>1.  you are right, the test-client does handle closed/connection error<br>
>>callbacks, but the code itself does not initiate a disconnect from the<br>
>>server but rather it handles cases where the server dies...not sure if<br>
>>that would make a difference. in my application the client is<br>
>>disconnecting.<br>
><br>
>No test-client also does initiate a disconnect from the server.  The<br>
>connection gets a random 'lifetime' when it is made, after sending that<br>
>many messages it closes the connection and after the ratelimit period<br>
>the outer loop will create a new one.<br>
><br>
>>2.  I can try a later websockets however is there any logging I can<br>
>put<br>
>>into libwebsockets to know why after connection i get a<br>
>callback_closed<br>
>>event after some time randomly? The server is not disconnecting from<br>
>>what I can see.<br>
><br>
>As I said<br>
><br>
>>>In later lws in CONNECTION_ERROR, *in may point to a string<br>
>describing<br>
>>>the problem.<br>
><br>
>If lws did something that failed and initiates the close, there are<br>
>like 20 different reason strings to help debug it.<br>
><br>
>If the peer closes the socket though, 'in' will be NULL.<br>
><br>
>You can turn up the logging to get additional clues, build in DEBUG<br>
>mode at cmake (see README.build.md)  and set the logging level high (eg<br>
>-d 65535 on the test client).<br>
><br>
>-Andy<br>
><br>
>><br>
>><br>
>>________________________________<br>
>>From: Andy Green <andy@warmcat.com><br>
>>Sent: Wednesday, June 14, 2017 3:36 PM<br>
>>To: Ash 20001; libwebsockets@ml.libwebsockets.org<br>
>>Subject: Re: [Libwebsockets] Is there a way to reuse a lws_context<br>
>>without destroying it<br>
>><br>
>><br>
>><br>
>>On June 15, 2017 1:29:46 AM GMT+08:00, Ash 20001<br>
><ash20001@hotmail.com><br>
>>wrote:<br>
>>>sorry i forgot to mention that on reconnect i am connecting to a<br>
>>>different port and potentially even different server ip. Is that why<br>
>>it<br>
>>>won't work with the same context?<br>
>><br>
>>Doubt it, every connect starts fresh.<br>
>><br>
>>>________________________________<br>
>>>From: Ash 20001 <ash20001@hotmail.com><br>
>>>Sent: Wednesday, June 14, 2017 8:47 AM<br>
>>>To: Andy Green<br>
>>>Subject: Re: [Libwebsockets] Is there a way to reuse a lws_context<br>
>>>without destroying it<br>
>>><br>
>>><br>
>>>I am using 1.7 websockets. When I try it again, I start immediately<br>
>><br>
>>1.7 is too old... please see if you still have a problem on master<br>
>lws.<br>
>><br>
>>>getting callback_closed messages after lws_client_connect_via_info is<br>
>>>called. I have no idea why I am getting these messages but if I<br>
>>destroy<br>
>>>the context and then call lws_Create_Context again, it works.<br>
>><br>
>>In later lws in CONNECTION_ERROR, *in may point to a string describing<br>
>>the problem.<br>
>><br>
>>><br>
>>>In libwebsockets-test-client, it doesn't seem to handle callback<br>
>>closed<br>
>>>or callback connection error. Normally during these events I exit out<br>
>><br>
>>It does handle them, or it doesn't know it should retry (mymemory only<br>
>>goesback to v2.0-ish though).<br>
>><br>
>>>of the main lws_Service loop, and then later I try to call<br>
>>>connect_via_info again, restart the service loop, and then run into<br>
>>the<br>
>>>issue above. What should I do to prevent this?<br>
>><br>
>>See if it still happens on later lws.<br>
>><br>
>>>Yes openssl is being trashed and messing around with other threads<br>
>>>using curl to an https source for instance so I am trying to<br>
>>workaround<br>
>>>it because I cannot change the openssl version.<br>
>><br>
>>You're going to have to change something...<br>
>><br>
>>-Andy<br>
>><br>
>>><br>
>>>________________________________<br>
>>>From: Andy Green <andy@warmcat.com><br>
>>>Sent: Wednesday, June 14, 2017 12:29 AM<br>
>>>To: libwebsockets@ml.libwebsockets.org; Ash 20001;<br>
>>>libwebsockets@ml.libwebsockets.org<br>
>>>Subject: Re: [Libwebsockets] Is there a way to reuse a lws_context<br>
>>>without destroying it<br>
>>><br>
>>><br>
>>><br>
>>>On June 14, 2017 2:35:24 PM GMT+08:00, Ash 20001<br>
>><ash20001@hotmail.com><br>
>>>wrote:<br>
>>>>Is there a way to call lws_create_context just once for program<br>
>>>>lifetime as a client, and use that context for many connections (ie.<br>
>>>>connect to a server, disconnect, repeat)? I have tried but it<br>
>doesn't<br>
>>>>seem to work on the second connection.<br>
>>><br>
>>>Yes it should be fine.<br>
>>><br>
>>>Libwebsockets-test-client does exactly this in its normal operation.<br>
>>><br>
>>>What exactly happens (and does it happen on lws master?)<br>
>>><br>
>>>>The reason I ask is because I am having SSL issues with other<br>
>threads<br>
>>>>that I have no control over in a process which use ssl functions in<br>
>>>>CURL. lws_destroy_context globally destructs SSL state and causes<br>
>>>>issues.  My openssl version is rather old 0.9.8 and cannot be<br>
>>changed.<br>
>>><br>
>>>Yeah.... we have seen it before.  Later openssl fixed it.<br>
>>><br>
>>>It will trash openssl for the whole process.  Is that why you can't<br>
>>get<br>
>>>a second client connection in lws?<br>
>>><br>
>>>-Andy<br>
>>><br>
>>>><br>
>>>>Thanks!<br>
>>>><br>
>>>>(Sorry if I sent two emails, not sure if the first one went through<br>
>>>>because I was trying to subscribe to the mailing list).<br>
</div>
</span></font></div>
</div>
</body>
</html>