Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1752648760, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"cc5cd6e6245a84a1e31665014a826eee", "commit": {"type":"commit", "time": 1615408251, "time_ofs": 0, "oid_tree": { "oid": "71ba02bd9f85a3421e4c1dce89c5186723f904a9", "alias": []}, "oid":{ "oid": "27cc9e33e03657f0146ec79b8e34e70a9ef55eab", "alias": []}, "msg": "client: DNS failure should retry while waiting for connect timeout", "sig_commit": { "git_time": { "time": 1615408251, "offset": 0 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1615381126, "offset": 0 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }}, "body": "client: DNS failure should retry while waiting for connect timeout\n\nIf the DNS lookup fails, we just sit out the remaining connect time.\n\nThe adapts it to reuse the wsi-\u003esul_connect_timeout to schedule DNS lookup\nretries until we're out of time.\n\nEventually we want to try other things as well, this is aligned with that.\n\nFound with fault injection.\n" , "diff": "diff --git a/lib/core-net/client/connect3.c b/lib/core-net/client/connect3.c\nindex ec1b250..ee08ffc 100644\n--- a/lib/core-net/client/connect3.c\n+++ b/lib/core-net/client/connect3.c\n@@ -39,6 +39,23 @@ lws_client_conn_wait_timeout(lws_sorted_usec_list_t *sul)\n \tlws_client_connect_3_connect(wsi, NULL, NULL, 0, NULL);\n }\n \n+void\n+lws_client_dns_retry_timeout(lws_sorted_usec_list_t *sul)\n+{\n+\tstruct lws *wsi \u003d lws_container_of(sul, struct lws,\n+\t\t\t\t\t sul_connect_timeout);\n+\n+\t/*\n+\t * This limits the amount of dns lookups we will try before\n+\t * giving up and failing... it reuses sul_connect_timeout, which\n+\t * isn't officially used until we connected somewhere.\n+\t */\n+\n+\tlwsl_info(\u0022%s: dns retry\u005cn\u0022, __func__);\n+\tif (!lws_client_connect_2_dnsreq(wsi))\n+\t\tlwsl_notice(\u0022%s: DNS lookup failed\u005cn\u0022, __func__);\n+}\n+\n /*\n * Figure out if an ongoing connect() has arrived at a final disposition or not\n *\n@@ -146,6 +163,7 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,\n \t */\n \n \tif (result) {\n+\t\tlws_sul_cancel(\u0026wsi-\u003esul_connect_timeout);\n \t\tlws_sort_dns(wsi, result);\n #if defined(LWS_WITH_SYS_ASYNC_DNS)\n \t\tlws_async_dns_freeaddrinfo(\u0026result);\n@@ -174,8 +192,19 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,\n \t !wsi-\u003especulative_connect_owner.count /* no spec attempt */ ) {\n \t\tlwsl_notice(\u0022%s: dns lookup failed %d\u005cn\u0022, __func__, n);\n \n-\t\tcce \u003d \u0022dns lookup failed\u0022;\n-\t\tgoto oom4;\n+\t\t/*\n+\t\t * DNS lookup itself failed... let's try again until we\n+\t\t * timeout\n+\t\t */\n+\n+\t\tlwsi_set_state(wsi, LRS_UNCONNECTED);\n+\t\tlws_sul_schedule(wsi-\u003ea.context, 0, \u0026wsi-\u003esul_connect_timeout,\n+\t\t\t\t lws_client_dns_retry_timeout,\n+\t\t\t\t\t\t LWS_USEC_PER_SEC);\n+\t\treturn wsi;\n+\n+//\t\tcce \u003d \u0022dns lookup failed\u0022;\n+//\t\tgoto oom4;\n \t}\n \n \t/*\ndiff --git a/lib/system/async-dns/async-dns-parse.c b/lib/system/async-dns/async-dns-parse.c\nindex 0014555..cc9693a 100644\n--- a/lib/system/async-dns/async-dns-parse.c\n+++ b/lib/system/async-dns/async-dns-parse.c\n@@ -263,8 +263,8 @@ start:\n \n \t\tif (n \u003c 1 || n !\u003d m ||\n \t\t strncmp(stack[0].name, stack[stp].name, (unsigned int)n)) {\n-\t\t\tlwsl_notice(\u0022%s: skipping %s vs %s\u005cn\u0022, __func__,\n-\t\t\t\t\tstack[0].name, stack[stp].name);\n+\t\t\t//lwsl_notice(\u0022%s: skipping %s vs %s\u005cn\u0022, __func__,\n+\t\t\t//\t\tstack[0].name, stack[stp].name);\n \t\t\tgoto skip;\n \t\t}\n \ndiff --git a/lib/system/async-dns/async-dns.c b/lib/system/async-dns/async-dns.c\nindex ed13fd7..ba15529 100644\n--- a/lib/system/async-dns/async-dns.c\n+++ b/lib/system/async-dns/async-dns.c\n@@ -398,7 +398,7 @@ lws_adns_get_cache(lws_async_dns_t *dns, const char *name)\n \t\t\t\t lws_dll2_get_head(\u0026dns-\u003ecached)) {\n \t\tc \u003d lws_container_of(d, lws_adns_cache_t, list);\n \n-\t\tlwsl_notice(\u0022%s vs %s (inc %d)\u005cn\u0022, name, c-\u003ename, c-\u003eincomplete);\n+\t\t// lwsl_notice(\u0022%s vs %s (inc %d)\u005cn\u0022, name, c-\u003ename, c-\u003eincomplete);\n \n \t\tif (!c-\u003eincomplete \u0026\u0026 !strcasecmp(name, c-\u003ename)) {\n \t\t\t/* Keep sorted by LRU: move to the head */\ndiff --git a/minimal-examples/api-tests/api-test-async-dns/main.c b/minimal-examples/api-tests/api-test-async-dns/main.c\nindex ae0f5e0..4af79d3 100644\n--- a/minimal-examples/api-tests/api-test-async-dns/main.c\n+++ b/minimal-examples/api-tests/api-test-async-dns/main.c\n@@ -112,8 +112,8 @@ next_test_cb(lws_sorted_usec_list_t *sul)\n \t\t\t\tadt[dtest].dns_name,\n \t\t\t\t(adns_query_type_t)adt[dtest].recordtype, cb1, NULL,\n \t\t\t\tcontext);\n-\tif (m !\u003d LADNS_RET_CONTINUING \u0026\u0026 m !\u003d LADNS_RET_FOUND) {\n-\t\tlwsl_err(\u0022%s: adns 1 failed: %d\u005cn\u0022, __func__, m);\n+\tif (m !\u003d LADNS_RET_CONTINUING \u0026\u0026 m !\u003d LADNS_RET_FOUND \u0026\u0026 m !\u003d LADNS_RET_FAILED_WSI_CLOSED) {\n+\t\tlwsl_err(\u0022%s: adns 1: %s failed: %d\u005cn\u0022, __func__, adt[dtest].dns_name, m);\n \t\tinterrupted \u003d 1;\n \t}\n }\ndiff --git a/minimal-examples/secure-streams/minimal-secure-streams-testsfail/CMakeLists.txt b/minimal-examples/secure-streams/minimal-secure-streams-testsfail/CMakeLists.txt\nindex 28b8c15..8244494 100644\n--- a/minimal-examples/secure-streams/minimal-secure-streams-testsfail/CMakeLists.txt\n+++ b/minimal-examples/secure-streams/minimal-secure-streams-testsfail/CMakeLists.txt\n@@ -31,7 +31,7 @@ if (requirements)\n \t\tset_tests_properties(ss-tf\n \t\t\t\t PROPERTIES\n \t\t\t\t WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-testsfail\n-\t\t\t\t TIMEOUT 240)\n+\t\t\t\t TIMEOUT 440)\n \n \t\tif (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API)\n \n@@ -74,7 +74,7 @@ if (requirements)\n \t\t\tset_tests_properties(sspc-minimaltf PROPERTIES\n \t\t\t\tWORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-testsfail\n \t\t\t\tFIXTURES_REQUIRED \u0022sstfproxy\u0022\n-\t\t\t\tTIMEOUT 240)\n+\t\t\t\tTIMEOUT 440)\n \n \t\tendif()\n \ndiff --git a/minimal-examples/secure-streams/minimal-secure-streams-testsfail/minimal-secure-streams-testsfail.c b/minimal-examples/secure-streams/minimal-secure-streams-testsfail/minimal-secure-streams-testsfail.c\nindex e5339e1..db076e1 100644\n--- a/minimal-examples/secure-streams/minimal-secure-streams-testsfail/minimal-secure-streams-testsfail.c\n+++ b/minimal-examples/secure-streams/minimal-secure-streams-testsfail/minimal-secure-streams-testsfail.c\n@@ -48,9 +48,9 @@ static const char * const default_ss_policy \u003d\n \n \t \u0022\u005c\u0022retry\u005c\u0022: [\u0022\t/* named backoff / retry strategies */\n \t\t\u0022{\u005c\u0022default\u005c\u0022: {\u0022\n-\t\t\t\u0022\u005c\u0022backoff\u005c\u0022: [\t 1000, 1000, 1000, 1000, 1000\u0022\n+\t\t\t\u0022\u005c\u0022backoff\u005c\u0022: [\t 1000, 1000, 1000, 1000\u0022\n \t\t\t\t\u0022],\u0022\n-\t\t\t\u0022\u005c\u0022conceal\u005c\u0022:\u0022\t\t\u00225,\u0022\n+\t\t\t\u0022\u005c\u0022conceal\u005c\u0022:\u0022\t\t\u00224,\u0022\n \t\t\t\u0022\u005c\u0022jitterpc\u005c\u0022:\u0022\t\t\u002220,\u0022\n \t\t\t\u0022\u005c\u0022svalidping\u005c\u0022:\u0022\t\u002230,\u0022\n \t\t\t\u0022\u005c\u0022svalidhup\u005c\u0022:\u0022\t\u002235\u0022\n@@ -504,19 +504,19 @@ struct tests_seq {\n \n \t{\n \t\t\u0022h1:80 NXDOMAIN exhaust retries\u0022,\n-\t\t\u0022nxd_h1\u0022, 35 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t\u0022nxd_h1\u0022, 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n \t\t(1 \u003c\u003c LWSSSCS_QOS_ACK_REMOTE) | (1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n \t\t(1 \u003c\u003c LWSSSCS_TIMEOUT)\n \t},\n \t{\n \t\t\u0022h1:443 NXDOMAIN exhaust retries\u0022,\n-\t\t\u0022nxd_h1_tls\u0022, 35 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t\u0022nxd_h1_tls\u0022, 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n \t\t(1 \u003c\u003c LWSSSCS_QOS_ACK_REMOTE) | (1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n \t\t(1 \u003c\u003c LWSSSCS_TIMEOUT)\n \t},\n \t{\n \t\t\u0022h2:443 NXDOMAIN exhaust retries\u0022,\n-\t\t\u0022nxd_h2_tls\u0022, 35 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t\u0022nxd_h2_tls\u0022, 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n \t\t(1 \u003c\u003c LWSSSCS_QOS_ACK_REMOTE) | (1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n \t\t(1 \u003c\u003c LWSSSCS_TIMEOUT)\n \t},\n@@ -553,21 +553,18 @@ struct tests_seq {\n \n \t{\n \t\t\u0022h1:badcert_hostname\u0022,\n-\t\t\u0022badcert_hostname\u0022, 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT,\n-\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n-\t\t(1 \u003c\u003c LWSSSCS_ALL_RETRIES_FAILED)\n+\t\t\u0022badcert_hostname\u0022, 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE)\n \t},\n \t{\n \t\t\u0022h1:badcert_expired\u0022,\n-\t\t\u0022badcert_expired\u0022, 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT,\n-\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n-\t\t(1 \u003c\u003c LWSSSCS_ALL_RETRIES_FAILED)\n+\t\t\u0022badcert_expired\u0022, 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE)\n \t},\n \t{\n \t\t\u0022h1:badcert_selfsigned\u0022,\n-\t\t\u0022badcert_selfsigned\u0022, 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT,\n-\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE) |\n-\t\t(1 \u003c\u003c LWSSSCS_ALL_RETRIES_FAILED)\n+\t\t\u0022badcert_selfsigned\u0022, 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED,\n+\t\t(1 \u003c\u003c LWSSSCS_QOS_NACK_REMOTE)\n \t},\n \n };\n","s":{"c":1752648760,"u": 4879}} ],"g": 6037,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}