-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Open
Description
mg_sendnsreq() assumes a connection can be immediately used after calling mg_connect (does not wait for a CONNECT event), so when "connecting" to a local DNS, ARP lookup is triggered but mg_send() is called right away, failing, and calling mg_error() to close the connection
Timeline:
mg_connect
mg_resolve
mg_sendnsreq
mg_connect
mg_resolve
mg_connect_resolved
-------------------------------------------------------------- remote DNS
mac_resolved
MG_EV_CONNECT
dnsc->c->pfn <- dns_cb
mg_dns_send
mg_send
-------------------------------------------------------------- local DNS
arp_lookup
dnsc->c->pfn <- dns_cb
mg_dns_send
mg_send ! fails because we are still resolving
... ARP response arrives
mac_resolved
MG_EV_CONNECT
Local DNS verbose log:
28e5dc4 3 net.c:176:mg_connect 5 -1 udp://time.google.com:123
28e5dc4 3 net.c:176:mg_connect 6 -1 udp://192.168.69.2:53
28e5dc4 3 net_builtin.c:1138:mg_connect 6 192.168.69.88:42829 -> 192.168.69.2:53
28e5dc4 3 net_builtin.c:1149:mg_connect 6 ARP lookup...
28e5dc4 4 net_builtin.c:184:settmout 6 2 -> 28e5e27
28e5dc4 4 dns.c:260:mg_sendnsreq 5 resolving time.google.com @ udp://192.168.69.2:53, txnid 1
28e5dc4 4 net_builtin.c:1249:mg_send still resolving...
28e5dc4 1 event.c:31:mg_error 6 -1 DNS send
28e5dc4 4 net_builtin.c:1219:mg_mgr_pol 6 .. tChrC 0 0
28e5dc4 1 event.c:31:mg_error 5 -1 DNS error
28e5dc4 3 net.c:148:mg_close_conn 6 -1 closed
28e5dc4 4 net_builtin.c:1219:mg_mgr_pol 5 .. tchRC 0 0
28e5dc4 3 net.c:148:mg_close_conn 5 -1 closed
Metadata
Metadata
Assignees
Labels
No labels