[Libwebsockets] LWS_CALLBACK_CLIENT_CONNECTION_ERROR never got triggered

Andy Green andy at warmcat.com
Mon Apr 27 13:09:42 CEST 2015



On 27 April 2015 19:00:46 GMT+08:00, Andy Green <andy at warmcat.com> wrote:
>
>
>On 27 April 2015 15:09:40 GMT+08:00, bjorka adinov
><adinov.bjorka at gmail.com> wrote:
>>Hello,
>>
>>I checked the windows part code and apparently the callback is indeed
>>not
>>called when lws client timeouts after trying to connect to non
>>listening
>>socket. Is this by design or something need to be fixed ?
>
>Hm I tried to connect the test client to 5.5.5.5 and he does just sit
>there.  (It's helpful if you can give me a way to reproduce the problem
>like that).
>
>I guess he is blocking on something to do with the initial connect,
>I'll take a look at it.

It's not blocking at all, which is good.

It's just in an unusual connection mode at that point, the close code didn't understand that should also do the callback.

I pushed a fix (for 5.5.5.5 anyway I guess that is also what you describe).

-Andy

>-Andy
>
>>Thanks
>>
>>On Thu, Apr 16, 2015 at 6:57 PM, Andy Green <andy at warmcat.com> wrote:
>>
>>>
>>>
>>> On 16 April 2015 17:30:40 GMT+08:00, bjorka adinov <
>>> adinov.bjorka at gmail.com> wrote:
>>> >Hello,
>>> >
>>> >I have a problem. I have client - server application, both
>utilizing
>>> >libwebsockets. The usual scenario is whenever the client
>application
>>> >active, it will try to connect to the server automatically. The
>>client
>>> >use libwebsocket_client_connect() to connect. As stated in the
>>readme,
>>> >the
>>> >client has to wait for LWS_CALLBACK_CLIENT_CONNECTION_ERROR to know
>>> >that
>>> >the connection attempt has failed. Unfortunately when the server
>>isn't
>>> >active yet, LWS_CALLBACK_CLIENT_CONNECTION_ERROR never got
>triggered
>>> >even
>>> >after 5 second, so the client can't clean up properly. I have tried
>>> >this
>>> >using the samples and the result is the same.
>>>
>>> Hm.
>>>
>>> >I'm using libwebsockets version 1.4 and ms visual studio 2013. Any
>>> >response
>>> >will be appreciated
>>>
>>> When you say, "the server isn't active yet", if I try to connect to
>>an IP
>>> with no listening server socket, lws test client errors out
>>immeditely,
>>> which makes sense because there is a socket error immediately
>>>
>>> [agreen at build build]$ libwebsockets-test-client  localhost
>>> libwebsockets test client
>>> (C) Copyright 2010-2015 Andy Green <andy at warmcat.com> licensed under
>>> LGPL2.1
>>> [1429184098:8952] NOTICE: Initial logging level 7
>>> [1429184098:8952] NOTICE: Library version: 1.4 c7378d8
>>> [1429184098:8952] NOTICE: IPV6 not compiled in
>>> [1429184098:8952] NOTICE: libev support not compiled in
>>> [1429184098:8953] NOTICE:  static allocation: 4536 + (16 x 1024 fds)
>>=
>>> 20920 bytes
>>> [1429184098:8953] NOTICE:  canonical_hostname = build.warmcat.com
>>> [1429184098:8953] NOTICE:  per-conn mem: 248 + 2140 headers +
>>protocol rx
>>> buf
>>> Waiting for connect...
>>> LWS_CALLBACK_CLIENT_CONNECTION_ERROR
>>> Exiting
>>> [1429184098:9151] NOTICE: libwebsocket_context_destroy
>>>
>>> If you mean he's listening but nonresponsive, like this
>>>
>>> diff --git a/test-server/test-server.c b/test-server/test-server.c
>>> index b321ff8..91d430a 100644
>>> --- a/test-server/test-server.c
>>> +++ b/test-server/test-server.c
>>> @@ -924,6 +924,9 @@ int main(int argc, char **argv)
>>>                 return -1;
>>>         }
>>>
>>> +
>>> +       sleep(10000);
>>> +
>>>         n = 0;
>>>         while (n >= 0 && !force_exit) {
>>>                 struct timeval tv;
>>>
>>> The client times out properly
>>>
>>> [agreen at build build]$ libwebsockets-test-client  localhost -d65535
>>> libwebsockets test client
>>> (C) Copyright 2010-2015 Andy Green <andy at warmcat.com> licensed under
>>> LGPL2.1
>>> [1429184685:6858] NOTICE: Initial logging level 65535
>>> [1429184685:6858] NOTICE: Library version: 1.4 c7378d8
>>> [1429184685:6858] NOTICE: IPV6 not compiled in
>>> [1429184685:6858] NOTICE: libev support not compiled in
>>> [1429184685:6858] INFO:  LWS_MAX_HEADER_LEN: 1024
>>> [1429184685:6858] INFO:  LWS_MAX_PROTOCOLS: 5
>>> [1429184685:6858] INFO:  SPEC_LATEST_SUPPORTED: 13
>>> [1429184685:6858] INFO:  AWAITING_TIMEOUT: 5
>>> [1429184685:6858] INFO:  SYSTEM_RANDOM_FILEPATH: '/dev/urandom'
>>> [1429184685:6858] INFO:  LWS_MAX_ZLIB_CONN_BUFFER: 65536
>>> [1429184685:6858] NOTICE:  static allocation: 4536 + (16 x 1024 fds)
>>=
>>> 20920 bytes
>>> [1429184685:6859] INFO:  LWS_MAX_EXTENSIONS_ACTIVE: 3
>>> [1429184685:6859] NOTICE:  canonical_hostname = build.warmcat.com
>>> [1429184685:6859] NOTICE:  per-conn mem: 248 + 2140 headers +
>>protocol rx
>>> buf
>>> [1429184685:7090] PARSER:   Protocol:
>>> dumb-increment-protocol,fake-nonexistant-protocol
>>> [1429184685:7091] PARSER:   Protocol:
>>> fake-nonexistant-protocol,lws-mirror-protocol
>>> [1429184685:7091] CLIENT: libwebsocket_client_connect: direct conn
>>> [1429184685:7092] CLIENT: libwebsocket_client_connect_2
>>> [1429184685:7092] CLIENT: libwebsocket_client_connect_2: address
>>localhost
>>> [1429184685:7097] INFO: insert_wsi_socket_into_fds: wsi=0x1999f70,
>>sock=6,
>>> fds pos=1
>>> [1429184685:7099] CLIENT: nonblocking connect retry
>>> Waiting for connect...
>>> [1429184685:7099] CLIENT: libwebsocket_client_connect_2
>>> [1429184685:7100] CLIENT: libwebsocket_client_connect_2: address
>>localhost
>>> [1429184685:7101] CLIENT: connected
>>> [1429184685:7102] CLIENT: libwebsocket_client_connect: direct conn
>>> [1429184685:7103] CLIENT: libwebsocket_client_connect_2
>>> [1429184685:7103] CLIENT: libwebsocket_client_connect_2: address
>>localhost
>>> [1429184685:7104] INFO: insert_wsi_socket_into_fds: wsi=0x199a120,
>>sock=7,
>>> fds pos=2
>>> [1429184685:7106] CLIENT: nonblocking connect retry
>>> [1429184685:7106] CLIENT: libwebsocket_client_connect_2
>>> [1429184685:7107] CLIENT: libwebsocket_client_connect_2: address
>>localhost
>>> [1429184685:7108] CLIENT: connected
>>> [1429184691:0046] INFO: TIMEDOUT WAITING on 4
>>> [1429184691:0046] DEBUG: close: just_kill_connection
>>> [1429184691:0046] INFO: remove_wsi_socket_from_fds: wsi=0x1999f70,
>>sock=6,
>>> fds pos=1
>>> [1429184691:0046] DEBUG: not calling back closed
>>> [1429184692:0104] INFO: TIMEDOUT WAITING on 4
>>> [1429184692:0104] DEBUG: close: just_kill_connection
>>> [1429184692:0104] INFO: remove_wsi_socket_from_fds: wsi=0x199a120,
>>sock=7,
>>> fds pos=1
>>> [1429184692:0104] DEBUG: not calling back closed
>>>
>>> So there's no huge problem like he is stuck.
>>>
>>> However you are right, he doesn't call back appropriately under
>those
>>> conditions.
>>>
>>> I pushed a patch that makes him do the callback if he meets that
>>> situation.  Thanks for letting me know.
>>>
>>> -Andy
>>>
>>> >Thanks
>>> >
>>> >
>>>
>>>------------------------------------------------------------------------
>>> >
>>> >_______________________________________________
>>> >Libwebsockets mailing list
>>> >Libwebsockets at ml.libwebsockets.org
>>> >http://ml.libwebsockets.org/mailman/listinfo/libwebsockets
>>>
>>>
>
>_______________________________________________
>Libwebsockets mailing list
>Libwebsockets at ml.libwebsockets.org
>http://ml.libwebsockets.org/mailman/listinfo/libwebsockets




More information about the Libwebsockets mailing list