This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, On 14/03/15 00:56, Carlos O'Donell wrote: > Other than that, it must accurately set RES_INIT flag to indicate > the structure is initialized and does not need to be initialized > again. > > The obvious dislcaimer is that this is very fragile and may break > at any time if we change the layout of _res. > Would that be what res_init() is for? If so, that doesn't seem to work either. If I use res_init(); before I set _res, it still overwrites it on the first call to getaddrinfo. This is the same for using res_query. From gdb: > Breakpoint 1, main () at k.c:9 > 9 int main() { > (gdb) n > 18 res_init(); > (gdb) n > 19 inet_pton(AF_INET, "208.67.220.220", &server); > (gdb) p _res > $1 = {retrans = 5, retry = 4, options = 524993, nscount = 1, > nsaddr_list = {{sin_family = 2, sin_port = 13568, sin_addr = {s_addr = > 16842879}, sin_zero = "\000\000\000\000\000\000\000"}, {sin_family = > 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = > "\000\000\000\000\000\000\000"}, {sin_family = 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}}, > id = 902, dnsrch = { > 0x7ffff7bbd460 <_res+128> "", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, > defdname = '\000' <repeats 255 times>, pfcode = 0, ndots = 1, nsort = > 0, ipv6_unavail = 0, unused = 0, sort_list = {{addr = {s_addr = 0}, > mask = 0}, {addr = { > s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr > = {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, > mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = {s_addr = > 0}, mask = 0}}, qhook = 0x0, rhook = 0x0, res_h_errno = 0, _vcsock = > -1, _flags = 0, _u = { > pad = "\000\000\003\000\003\000\003", '\000' <repeats 41 times>, > "\001\000\000", _ext = {nscount = 0, nsmap = {3, 3, 3}, nssocks = {0, > 0, 0}, nscount6 = 0, nsinit = 0, nsaddrs = {0x0, 0x0, 0x0}, initstamp > = 1}}} > (gdb) n > 21 serverSock.sin_family = AF_INET; > (gdb) n > 22 serverSock.sin_port = htons(53); > (gdb) n > 23 serverSock.sin_addr = server; > (gdb) n > 25 _res.nscount = 1; > (gdb) n > 26 _res.nsaddr_list[0] = serverSock; > (gdb) n > 27 printf("Blah\n"); > (gdb) p _res > $2 = {retrans = 5, retry = 4, options = 524993, nscount = 1, > nsaddr_list = {{sin_family = 2, sin_port = 13568, sin_addr = {s_addr = > 3705422800}, sin_zero = "\000\000\000\000\000\000\000"}, {sin_family = > 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = > "\000\000\000\000\000\000\000"}, {sin_family = 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}}, > id = 902, dnsrch = { > 0x7ffff7bbd460 <_res+128> "", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, > defdname = '\000' <repeats 255 times>, pfcode = 0, ndots = 1, nsort = > 0, ipv6_unavail = 0, unused = 0, sort_list = {{addr = {s_addr = 0}, > mask = 0}, {addr = { > s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr > = {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, > mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = {s_addr = > 0}, mask = 0}}, qhook = 0x0, rhook = 0x0, res_h_errno = 0, _vcsock = > -1, _flags = 0, _u = { > pad = "\000\000\003\000\003\000\003", '\000' <repeats 41 times>, > "\001\000\000", _ext = {nscount = 0, nsmap = {3, 3, 3}, nssocks = {0, > 0, 0}, nscount6 = 0, nsinit = 0, nsaddrs = {0x0, 0x0, 0x0}, initstamp > = 1}}} > (gdb) n > Blah > 28 int l = res_query("myip.opendns.com", ns_c_any, ns_t_a, buf, > sizeof(buf)); > (gdb) n > 29 if(l < 0) { > (gdb) p _res > $3 = {retrans = 5, retry = 4, options = 524993, nscount = 1, > nsaddr_list = {{sin_family = 2, sin_port = 13568, sin_addr = {s_addr = > 16842879}, sin_zero = "\000\000\000\000\000\000\000"}, {sin_family = > 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = > "\000\000\000\000\000\000\000"}, {sin_family = 0, sin_port = 0, > sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}}, > id = 12360, dnsrch = { > 0x7ffff7bbd460 <_res+128> "", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, > defdname = '\000' <repeats 255 times>, pfcode = 0, ndots = 1, nsort = > 0, ipv6_unavail = 0, unused = 0, sort_list = {{addr = {s_addr = 0}, > mask = 0}, {addr = { > s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr > = {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = > {s_addr = 0}, > mask = 0}, {addr = {s_addr = 0}, mask = 0}, {addr = {s_addr = > 0}, mask = 0}}, qhook = 0x0, rhook = 0x0, res_h_errno = 2, _vcsock = > -1, _flags = 0, _u = { > pad = "\001\000\000\000\003\000\003\000\377\377\377\377", '\000' > <repeats 12 times>, "\020 `", '\000' <repeats 21 times>, > "\002\000\000", _ext = {nscount = 1, nsmap = {0, 3, 3}, nssocks = {-1, > 0, 0}, nscount6 = 0, > nsinit = 0, nsaddrs = {0x602010, 0x0, 0x0}, initstamp = 2}}} Anyways, for my code, I assume I should be using the res_* family, as getaddrinfo is not guaranteed to use _res, right? Thanks, -- -- Joshua Rogers <https://internot.info/>
Attachment:
signature.asc
Description: OpenPGP digital signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |