jcs
/detritus
/amendments
/28
dnr: Try to bail on resolution after 4 seconds
There's not much point in waiting 30 seconds for this to fail. I'm
not 100% sure that dnr won't do something stupid when it finally
fails after we've already moved on, but let's find out.
jcs made amendment 28 about 1 year ago
--- dnr.c Mon Sep 30 15:36:50 2024
+++ dnr.c Thu Nov 7 09:57:54 2024
@@ -237,9 +237,10 @@ OSErr
DNSResolveName(char *name, unsigned long *ipAddress, void (*yielder)(void))
{
OSErr osErr;
- struct hostInfo aHostInfo;
+ static struct hostInfo aHostInfo;
volatile int done = 0;
-
+ unsigned long started;
+
osErr = OpenResolver(nil);
if (osErr)
return osErr;
@@ -249,11 +250,18 @@ DNSResolveName(char *name, unsigned long *ipAddress, v
if (osErr == cacheFault) {
/* StrToAddrMarkDone will set done when DNS resolution finishes */
- while (!done) {
+ started = Time;
+ done = 0;
+ while (!done && (Time - started < 4)) {
if (yielder)
yielder();
else
SystemTask();
+ }
+
+ if (!done) {
+ *ipAddress = 0;
+ return noAnsErr;
}
}