diff options
author | David Timber <dxdt@dev.snart.me> | 2024-11-23 13:38:09 +0100 |
---|---|---|
committer | David Timber <dxdt@dev.snart.me> | 2024-11-23 14:38:54 +0100 |
commit | 4c6930d481264d7f52d7502d8e6009f39a23a338 (patch) | |
tree | 689e3fd71d62f0c32ce904c17b07553237d8bed2 /writeups | |
parent | a3d2e4f801a327c1c2c4f16d9f61eaf8e7c86495 (diff) |
Patch writeups/ipv6/eyeball/eyeball.c ...
- Remove some unreachable code, unnecessary wait when v6 connection
already failed
- Fix garbage timespec when connection attempt not made after
getaddrinfo() returns
Diffstat (limited to 'writeups')
-rw-r--r-- | writeups/ipv6/eyeball/eyeball.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/writeups/ipv6/eyeball/eyeball.c b/writeups/ipv6/eyeball/eyeball.c index 21e99f6..fc01773 100644 --- a/writeups/ipv6/eyeball/eyeball.c +++ b/writeups/ipv6/eyeball/eyeball.c @@ -161,7 +161,7 @@ void *happy_th_main_inner ( struct timespec resolv; struct timespec conn; struct timespec end; - } ts; + } ts = { 0, }; clock_gettime(CLOCK_MONOTONIC, &ts.start); @@ -178,6 +178,7 @@ void *happy_th_main_inner ( err.error = fr; } + ts.conn = ts.resolv; goto END; } assert(gai_res != NULL); @@ -423,9 +424,16 @@ ssize_t poll_result (void) { } if (g.th[1].err.ready && g.th[1].err.result == HR_NULL) { - // ipv4 connected, but let's wait around for a bit + // ipv4 made it first struct timespec bias_deadline; + if (g.th[0].err.ready) { + // and ipv6 failed already. no need to do the waiting + return 2; + } + + // ipv6 connection attempt still in progress. + // let's wait around for a bit to see ipv6 makes it in time fprintf(stderr, ARGV0": ipv4 shot first\n"); get_leadtimef(&bias_deadline, opts.res_delay); @@ -435,14 +443,9 @@ ssize_t poll_result (void) { // ipv6 made it! return 1; } - else if (g.th[1].err.ready) { - // ipv6 didn't make it - return 2; - } - else { - // all timed out - return -1; - } + + // ipv6 didn't make it + return 2; } if (g.th[0].err.ready && g.th[1].err.ready) { |