Fix #1445 - send error to a resolving connection when DNS error happens

This commit is contained in:
Sergey Lyubka committed 2022-01-14 08:50:01 +00:00
1 parent 5fc284722f
commit 9fd80fd136
4 files changed
+28 -17

No files matched your search

+20 -15
View File
@@ -1152,6 +1152,23 @@ static void fn1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
(void) c;
}
static void test_dns_timeout(const char *dns_server_url, const char *errstr) {
// Test timeout
struct mg_mgr mgr;
char buf[100] = "";
int i;
mg_mgr_init(&mgr);
mgr.dns4.url = dns_server_url;
mgr.dnstimeout = 10;
LOG(LL_DEBUG, ("opening dummy DNS listener..."));
mg_listen(&mgr, mgr.dns4.url, NULL, NULL); // Just discard our queries
mg_http_connect(&mgr, "http://google.com", fn1, buf);
for (i = 0; i < 50 && buf[0] == '\0'; i++) mg_mgr_poll(&mgr, 1);
mg_mgr_free(&mgr);
LOG(LL_DEBUG, ("buf: [%s]", buf));
ASSERT(strcmp(buf, errstr) == 0);
}
static void test_dns(void) {
struct mg_dns_message dm;
// txid flags numQ numA numAP numOP
@@ -1171,21 +1188,9 @@ static void test_dns(void) {
ASSERT(mg_dns_parse(data, sizeof(data), &dm) == 1);
ASSERT(strcmp(dm.name, "") == 0);
{
// Test timeout
struct mg_mgr mgr;
char buf[100] = "";
int i;
mg_mgr_init(&mgr);
mgr.dns4.url = "udp://127.0.0.1:12345";
mgr.dnstimeout = 10;
LOG(LL_DEBUG, ("opening dummy DNS listener..."));
mg_listen(&mgr, mgr.dns4.url, NULL, NULL); // Just discard our queries
mg_http_connect(&mgr, "http://google.com", fn1, buf);
for (i = 0; i < 50 && buf[0] == '\0'; i++) mg_mgr_poll(&mgr, 1);
mg_mgr_free(&mgr);
ASSERT(strcmp(buf, "DNS timeout") == 0);
}
test_dns_timeout("udp://127.0.0.1:12345", "DNS timeout");
test_dns_timeout("", "resolver");
test_dns_timeout("tcp://0.0.0.0:0", "DNS error");
}
static void test_util(void) {