[Libwebsockets] 答复: 答复: 回复: 答复: A question about libwebsockets dns resolve

Andy Green andy at warmcat.com
Tue May 26 11:22:14 CEST 2020



On 5/26/20 10:14 AM, huangkaicheng wrote:
> Can you connect success in windows for ws client. The latest of master 
> can not connect success. The latest code it will wait connect util 
> timeout like(5.5.5.5 ).But if serverip is a reachable ip, it can not 
> connect success now.
> 
> It is my test ws server(100.95.128.76  not public address) that ws 
> client should connect success . but now it can not . Can you try it to 
> connect your ws server successfully in windows? Last version it can 
> connect success.

Yes it connects fine.

 >bin\Debug\lws-minimal-http-client.exe --server junk.bogus.warmcat.com 
-m -d1039
[2020/05/26 10:20:53:2653] U: LWS minimal http client [-d<verbosity>] 
[-l] [--h1]
[2020/05/26 10:20:53:2809] I: Initial logging level 1039
[2020/05/26 10:20:53:2809] I: Libwebsockets version: 
4.0.99-v4.0.0-134-g3d04cdcd v4.0.0-134-g3d04cdcd
[2020/05/26 10:20:53:2809] I: IPV6 not compiled in
[2020/05/26 10:20:53:2809] I:  LWS_DEF_HEADER_LEN    : 4096
[2020/05/26 10:20:53:2809] I:  LWS_MAX_SMP           : 1
[2020/05/26 10:20:53:2965] I:  sizeof (*info)        : 704
[2020/05/26 10:20:53:2965] I:  SYSTEM_RANDOM_FILEPATH: '/dev/urandom'
[2020/05/26 10:20:53:2965] I:  HTTP2 support         : available
[2020/05/26 10:20:53:2965] I: context created
[2020/05/26 10:20:53:2965] I: Using event loop: poll
[2020/05/26 10:20:53:2965] I: Default ALPN advertisment: h2,http/1.1
[2020/05/26 10:20:53:3123] I:  default timeout (secs): 5
[2020/05/26 10:20:53:3123] I:  Threads: 1 each 5 fds
[2020/05/26 10:20:53:3123] I:  mem: context:          6104 B (2008 ctx + 
(1 thr x 4096))
[2020/05/26 10:20:53:3123] I:  mem: http hdr size:   (4096 + 976), max 
count 5
[2020/05/26 10:20:53:3123] I:  mem: pollfd map:         80 B
[2020/05/26 10:20:53:3123] I:  Compiled with OpenSSL support
[2020/05/26 10:20:53:3123] I: Doing SSL library init
[2020/05/26 10:20:53:3278] I:  canonical_hostname = win10
[2020/05/26 10:20:53:3278] I: Creating Vhost 'default' (serving 
disabled), 5 protocols, IPv6 off
[2020/05/26 10:20:53:3434] I: lws_tls_client_create_vhost_context: vh 
default: created new client ctx 0
[2020/05/26 10:20:53:3747] I: created client ssl context for default
[2020/05/26 10:20:53:3747] I:  mem: per-conn:          824 bytes + 
protocol rx buf
[2020/05/26 10:20:53:3747] I: lws_cancel_service
[2020/05/26 10:20:53:3903] I: lws_state_notify_protocol_init: 
LWS_SYSTATE_CPD_PRE_TIME
[2020/05/26 10:20:53:3903] I: lws_ss_create: unknown stream type 
captive_portal_detect
[2020/05/26 10:20:53:3903] I: lws_ss_sys_cpd: Create stream failed (policy?)
[2020/05/26 10:20:53:4060] I: lws_state_notify_protocol_init: 
LWS_SYSTATE_CPD_PRE_TIME
[2020/05/26 10:20:53:4060] I: lws_ss_create: unknown stream type 
captive_portal_detect
[2020/05/26 10:20:53:4060] I: lws_ss_sys_cpd: Create stream failed (policy?)
[2020/05/26 10:20:53:4060] I: lws_state_notify_protocol_init: doing 
protocol init on POLICY_VALID
[2020/05/26 10:20:53:4060] I: lws_protocol_init
[2020/05/26 10:20:53:4216] I: system_notify_cb: operational
[2020/05/26 10:20:53:4216] I: lws_client_connect_via_info: role binding 
to h1
[2020/05/26 10:20:53:4216] I: lws_client_connect_via_info: protocol 
binding to http
[2020/05/26 10:20:53:4216] I: lws_client_connect_via_info: wsi 
0000024D51E86C20: h1 http entry
[2020/05/26 10:20:53:4216] I: lws_header_table_attach: wsi 
0000024D51E86C20: ah 0000000000000000 (tsi 0, count = 0) in
[2020/05/26 10:20:53:4372] I: _lws_create_ah: created ah 
0000024D51DB1160 (size 4096): pool length 1
[2020/05/26 10:20:53:4372] I: lws_header_table_attach: did attach wsi 
0000024D51E86C20: ah 0000024D51DB1160: count 1 (on exit)
[2020/05/26 10:20:53:4372] I: lws_client_connect_2_dnsreq: adding active 
conn 0000024D51E86C20
[2020/05/26 10:20:53:4372] I: lws_client_connect_2_dnsreq: 
0000024D51E86C20: lookup junk.bogus.warmcat.com:443
[2020/05/26 10:20:53:4531] I: lws_getaddrinfo46: getaddrinfo 
'junk.bogus.warmcat.com' says 0
[2020/05/26 10:20:53:4531] I: lws_client_connect_3_connect: 
junk.bogus.warmcat.com ipv4 5.5.5.5
[2020/05/26 10:20:53:4531] I: lws_state_transition_steps: 
CONTEXT_CREATED -> OPERATIONAL
[2020/05/26 10:20:53:4531] I: lws_client_connect_3_connect: errno 0
[2020/05/26 10:20:58:4685] I: lws_client_conn_wait_timeout: connect wait 
timeout has fired
[2020/05/26 10:20:58:4685] I: lws_client_connect_3_connect: abandoning 
connect due to timeout
[2020/05/26 10:20:58:4685] I: lws_client_connect_3_connect: (null) ipv4 
10.99.99.99
[2020/05/26 10:20:58:4685] I: lws_client_connect_3_connect: errno 0
[2020/05/26 10:21:03:4692] I: lws_client_conn_wait_timeout: connect wait 
timeout has fired
[2020/05/26 10:21:03:4692] I: lws_client_connect_3_connect: abandoning 
connect due to timeout
[2020/05/26 10:21:03:4692] I: lws_client_connect_3_connect: (null) ipv4 
46.105.127.147
[2020/05/26 10:21:03:4692] I: lws_client_connect_3_connect: errno 0
[2020/05/26 10:21:03:4841] I: lws_client_connect_3_connect: Connection 
started 0000024D51FCD3A0
[2020/05/26 10:21:03:4997] I: lws_client_connect_4_established: wsi 
0000024D51E86C20: h1 http client created own conn (raw 0) vh defaultm st 
0x202
[2020/05/26 10:21:03:4997] I: h1 client conn using alpn list 'h2'
[2020/05/26 10:21:03:5310] I: lws_role_call_alpn_negotiated: 'h2'
[2020/05/26 10:21:03:5310] I: rops_alpn_negotiated_h2: upgraded to H2
[2020/05/26 10:21:03:5310] I: lws_hpack_dynamic_size: from 0 to 65536, 
lim 65536
[2020/05/26 10:21:03:5310] I: rops_alpn_negotiated_h2: wsi 
0000024D51E86C20: configured for h2
[2020/05/26 10:21:03:5310] I: client connect OK
[2020/05/26 10:21:03:5466] I: lws_openssl_describe_cipher: wsi 
0000024D51E86C20: TLS_AES_256_GCM_SHA384, TLS_AES_256_GCM_SHA384, 256 
bits, TLSv1.3
[2020/05/26 10:21:03:5466] I: negotiated 'h2' using ALPN
[2020/05/26 10:21:03:5466] I: lws_role_call_alpn_negotiated: 'h2'
...

 From the git hash in your log, it doesn't look like you have the latest 
master, it is

e0c0007f3110efe2437b869ac4c312e04945dff7

at the moment.

-Andy

> -----邮件原件-----
> 发件人: Andy Green [mailto:andy at warmcat.com]
> 发送时间: 2020年5月26日16:17
> 收件人: huangkaicheng <huangkaicheng at huawei.com>; libwebsockets 
> <libwebsockets at ml.libwebsockets.org>
> 抄送: Chenyake <chenyake at huawei.com>
> 主题: Re: [Libwebsockets] 答复: 回复: 答复: A question about 
> libwebsockets dns resolve
> 
> On 5/26/20 4:16 AM, andy at warmcat.com <mailto:andy at warmcat.com> wrote:
> 
>> 
> 
>> 
> 
>> On May 26, 2020 3:05:51 AM UTC, huangkaicheng <huangkaicheng at huawei.com <mailto:huangkaicheng at huawei.com>> wrote:
> 
>>> Can you change "onevalid.bogus.warmcat.com"  second and later ip
> 
>>> 127.0.0.x to real ip (like 10.173.16.193(unreachable is also OK)) for
> 
>> 
> 
>> I also have blackhole.bogus.warmcat.com that is already 5.5.5.5 and the correct address, and test with that.
> 
>> 
> 
>>> testing. I can not change your dns setting. Latest code libwebsockets
> 
>>> doesnot still work. Second Ip (and later ip)does still not try wait.
> 
>>> Only first Ip can try wait util time out. Old version will try
> 
>>> indeed(last week). You can just change ip and test , you can
> 
>>> reproduce it. Old version will try util time out but lastest code of
> 
>>> master will not.
> 
>> 
> 
>> We're going around in circles because I can't get windows to do anything other than just use the correct address first.  On linux each time I run the test it rotates the dns results to start at a different place,  so by running it a few times I can see the different behaviours.  On 
> windows it connects to the server every time.
> 
>> 
> 
>> I'll try adding more junk in a new bogus.warmcat.com record and see what happens.
> 
> I trimmed the entries in each bogus record to 3 so with the default 5s 
> wait / 20s overall it cam always complete, and added two new ones 'junk'
> 
> and 'revjunk'
> 
> onevalid.bogus          IN      A       127.0.0.1
> 
>                           IN      A       127.0.0.2
> 
>                           IN      A       46.105.127.147
> 
> blackhole.bogus         IN      A       5.5.5.5
> 
>                           IN      A       5.5.5.5
> 
>                           IN      A       46.105.127.147
> 
> junk.bogus              IN      A       10.99.99.99
> 
>                           IN      A       5.5.5.5
> 
>                           IN      A       46.105.127.147
> 
> revjunk.bogus           IN      A       46.105.127.147
> 
>                           IN      A       5.5.5.5
> 
>                           IN      A       10.99.99.98
> 
> With Linux, you get a different ordering of the results each time, and, 
> on Linux, using what's in git from yesterday...
> 
> [2020/05/26 04:40:17:6377] I: lws_client_connect_2_dnsreq: 0x2278440:
> 
> lookup junk.bogus.warmcat.com:443
> 
> [2020/05/26 04:40:17:6395] I: lws_getaddrinfo46: getaddrinfo 
> 'junk.bogus.warmcat.com' says 0
> 
> [2020/05/26 04:40:17:6395] I: lws_client_connect_3_connect:
> 
> junk.bogus.warmcat.com ipv4 5.5.5.6
> 
> [2020/05/26 04:40:17:6396] I: lws_state_transition_steps:
> 
> CONTEXT_CREATED -> OPERATIONAL
> 
> [2020/05/26 04:40:22:6397] I: lws_client_conn_wait_timeout: connect wait 
> timeout has fired
> 
> [2020/05/26 04:40:22:6398] I: lws_client_connect_3_connect: abandoning 
> connect due to timeout
> 
> [2020/05/26 04:40:22:6398] I: lws_client_connect_3_connect: (null) ipv4
> 
> 5.5.5.5
> 
> [2020/05/26 04:40:27:6401] I: lws_client_conn_wait_timeout: connect wait 
> timeout has fired
> 
> [2020/05/26 04:40:27:6402] I: lws_client_connect_3_connect: abandoning 
> connect due to timeout
> 
> [2020/05/26 04:40:27:6402] I: lws_client_connect_3_connect: (null) ipv4
> 
> 46.105.127.147
> 
> [2020/05/26 04:40:27:6584] I: lws_client_connect_3_connect: getsockopt
> 
> check: conn OK
> 
> [2020/05/26 04:40:27:6585] I: lws_client_connect_3_connect: Connection 
> started 0x2299660
> 
> ie, it is doing what it is supposed to do.  When you say, without 
> qualification
> 
>>>  Latest code libwebsockets
> 
>>> does not still work. Second Ip (and later ip)does still not try wait.
> 
> this is adding to the confusion... it works fine on Linux.  And it 
> worked fine there before yesterday's patch, which at least as far as 
> separating out the timeout control is also moving things forward in the 
> right direction.
> 
> On Windows, I though I had figured out that its libc api always reports 
> the DNS in reverse order to the record, ie, the last response in the 
> record is the first reported one.  That is why on my existing DNS test 
> records, windows always magically "found" the correct server first so I 
> could not test the bad responses.  But it seems whatever it's doing is 
> more complicated, with 4 x test subdomains I could usually get one of 
> them to try the bad ones first and test it though.
> 
> I think I solved the problem and again updated the original patch, 
> please give master a try.
> 
> -Andy
> 
>> -Andy
> 
>> 
> 
>>>   
> 
>>> -----邮件原件-----
> 
>>> 发件人: andy at warmcat.com <mailto:andy at warmcat.com> [mailto:andy at warmcat.com]
> 
>>> 发送时间: 2020年5月26日3:17
> 
>>> 收件人: huangkaicheng <huangkaicheng at huawei.com 
> <mailto:huangkaicheng at huawei.com>>; libwebsockets
> 
>>> <libwebsockets at ml.libwebsockets.org 
> <mailto:libwebsockets at ml.libwebsockets.org>>
> 
>>> 抄送: Chenyake <chenyake at huawei.com <mailto:chenyake at huawei.com>>
> 
>>> 主题: Re: 回复:[Libwebsockets] 答复: A question about libwebsockets dns
> 
>>> resolve
> 
>>>
> 
>>>
> 
>>>
> 
>>> On May 25, 2020 11:04:00 AM UTC, huangkaicheng
> 
>>> <huangkaicheng at huawei.com <mailto:huangkaicheng at huawei.com>> wrote:
> 
>>>> Hi,
> 
>>>> I mean that the first resolved ip, it can wait connect until time out.
> 
>>>> And but second,third,and other it will not. It is not just 127.0.x.
> 
>>> you
> 
>>>> can change to make sure (onevalid.bogus.warmcat.com) dns resolve
> 
>>>> like (46.105.127.147(only can reach) , 2.3.5.4, 10.173.16.193,5.45.86.4)  .
> 
>>>> other Ip(unreachable it should wait connect util time out ).in last
> 
>>> old
> 
>>>> version(a week ago), it will wait some time rather than finish
> 
>>> quickly.
> 
>>>> It is quite different with last version(a week ago).
> 
>>>
> 
>>> I looked at this earlier and pushed a patch adding a separate
> 
>>> configurable timeout for the whole connect (default 20s) and reduced
> 
>>> the timeout for individual dns connect attempts to default to 5s.
> 
>>>
> 
>>> https://libwebsockets.org/git/libwebsockets/commit?id=9f4c19fd9d9dede
> 
>>> 1ec856ce4774d46cb4b79b26c
> 
>>>
> 
>>> It seems to work as before on Linux, on windows I cannot control the
> 
>>> dns ordering, both my test dns records 'just work' each time for
> 
>>> whatever reason, 127.xxx is never tried.
> 
>>>
> 
>>> -Andy
> 
>>>
> 
>>>>
> 
>>>> -----邮件原件-----
> 
>>>> 发件人: Andy Green [mailto:andy at warmcat.com]
> 
>>>> 发送时间: 2020年5月25日17:03
> 
>>>> 收件人: huangkaicheng <huangkaicheng at huawei.com 
> <mailto:huangkaicheng at huawei.com>>; libwebsockets
> 
>>>> <libwebsockets at ml.libwebsockets.org 
> <mailto:libwebsockets at ml.libwebsockets.org>>
> 
>>>> 抄送: Chenyake <chenyake at huawei.com <mailto:chenyake at huawei.com>>
> 
>>>> 主题: Re: 回复:[Libwebsockets] 答复: A question about libwebsockets dns
> 
>>>> resolve
> 
>>>>
> 
>>>>
> 
>>>>
> 
>>>> On 5/25/20 9:31 AM, huangkaicheng wrote:
> 
>>>>> Hi ,
> 
>>>>>
> 
>>>>>   I use test-client project in websockes previous. And it is
> 
>>>>> not
> 
>>>
> 
>>>>> my code. it is about your code in your project.
> 
>>>>
> 
>>>> OK, fair enough.
> 
>>>>
> 
>>>> But what I mean is please make it easy for me to reproduce your
> 
>>>> problem, ie minimal example, if a diff, give me the diff, and give
> 
>>>> me the commandline.  Then I can know if I can spare a few minutes, I
> 
>>>> can stop what I am doing and look at it (and I know immediately that
> 
>>>> it is
> 
>>>
> 
>>>> about a minimal example, which makes me much more want to stop and
> 
>>>> look).
> 
>>>>
> 
>>>> As Jaco says I am not sure if it just confuses the issue with the
> 
>>>> "timedout" log.  On some platforms, 127.0.0.x port closed acts like
> 
>>>> closed and send you a FIN, on other platforms (IIRC OSX) it acts
> 
>>>> like it was DROPped and waits.  If on windows platform it resets the
> 
>>>> connection, like on Linux, it will not wait around and just fail
> 
>>>> immediately, the log may not reflect the reality of why it gave up
> 
>>>> then, which is not ideal but not really a crisis.
> 
>>>>
> 
>>>> -Andy
> 
>>>>
> 
>>>>>
> 
>>>> imap://andy@warmcat.com:993/fetch%3EUID%3E.INBOX%3E126618?header=quo
> 
>>>> teb ody&part=1.1.3&filename=image002.png
> 
>>>>>
> 
>>>>> mkdir build
> 
>>>>>
> 
>>>>> cd build
> 
>>>>>
> 
>>>>> cmake .. -DLWS_WITH_SSL=0
> 
>>>>>
> 
>>>>> cmake --build . --config DEBUG
> 
>>>>>
> 
>>>>>   And I use
> 
>>>>>
> 
>>>> imap://andy@warmcat.com:993/fetch%3EUID%3E.INBOX%3E126618?header=quo
> 
>>>> teb ody&part=1.1.2&filename=image001.png
> 
>>>>>
> 
>>>>>   If I want to use minimal-ws-client, how can I build it
> 
>>>> success. I
> 
>>>>> build it failed.
> 
>>>>>
> 
>>>>> -----邮件原件-----
> 
>>>>> 发件人: Andy Green [mailto:andy at warmcat.com]
> 
>>>>> 发送时间: 2020年5月25日15:50
> 
>>>>> 收件人: huangkaicheng <huangkaicheng at huawei.com 
> <mailto:huangkaicheng at huawei.com>>; libwebsockets
> 
>>>>> <libwebsockets at ml.libwebsockets.org 
> <mailto:libwebsockets at ml.libwebsockets.org>>
> 
>>>>> 抄送: Chenyake <chenyake at huawei.com <mailto:chenyake at huawei.com>>
> 
>>>>> 主题: Re: 回复:[Libwebsockets] 答复: A question about libwebsockets dns
> 
>>>>> resolve
> 
>>>>>
> 
>>>>> On 5/25/20 8:35 AM, huangkaicheng wrote:
> 
>>>>>
> 
>>>>>> Hi,
> 
>>>>>
> 
>>>>>>
> 
>>>>>
> 
>>>>>>   there is still something wrong with latest code. Why try to
> 
>>>>>
> 
>>>>>> connect 127.0.0.1, 127.0.0.3, 127.0.0.2 time out so quickly?
> 
>>>>>
> 
>>>>> Can you please show me this using the lws minimal examples rather
> 
>>>> than
> 
>>>>> your code?That way I can try the same thing quickly and have some
> 
>>>>> reason to think we are looking at the same problem, and if I change
> 
>>>>> something, that it solves the problem.
> 
>>>>>
> 
>>>>> -Andy
> 
>>>>>
> 
>> _______________________________________________
> 
>> Libwebsockets mailing list
> 
>> Libwebsockets at ml.libwebsockets.org 
> <mailto:Libwebsockets at ml.libwebsockets.org>
> 
>> https://libwebsockets.org/mailman/listinfo/libwebsockets
> 
>> 
> 


More information about the Libwebsockets mailing list