Better timeout handling during mxdial.
[rsc] --rw-rw-r-- M 191333 glenda sys 6422 Sep 22 09:03 sys/src/cmd/upas/smtp/mxdial.c
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/upas/smtp/mxdial.c:48,53 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/upas/smtp/mxdial.c:48,61
return fd;
}
+ static int
+ timeout(void *x, char *msg)
+ {
+ if(strstr(msg, "alarm"))
+ return 1;
+ return 0;
+ }
+
/*
* take an address and return all the mx entries for it,
* most preferred first
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/upas/smtp/mxdial.c:90,96 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/upas/smtp/mxdial.c:98,108
mx[i].host, ds->service);
if(debug)
fprint(2, "mxdial trying %s\n", addr);
+ atnotify(timeout, 1);
+ alarm(10*1000);
fd = dial(addr, 0, 0, 0);
+ alarm(0);
+ atnotify(timeout, 0);
if(fd >= 0)
return fd;
}
[rsc] --rw-rw-r-- M 191333 glenda sys 20091 Sep 22 09:03 sys/src/cmd/upas/smtp/smtp.c
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/upas/smtp/smtp.c:198,209 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/upas/smtp/smtp.c:198,209
exits(0);
}
- /* 10 minutes to get through the initial handshake */
- atnotify(timeout, 1);
-
- alarm(10*alarmscale);
+ /* mxdial uses its own timeout handler */
if((rv = connect(addr)) != 0)
exits(rv);
+
+ /* 10 minutes to get through the initial handshake */
+ atnotify(timeout, 1);
alarm(10*alarmscale);
if((rv = hello(hellodomain, 0)) != 0)
goto error;
[sys] --rwxrwxr-x M 191333 glenda sys 275242 Sep 22 23:10 386/bin/upas/smtp
/sys/src/cmd/upas/smtp/mxdial.c:callmx
/sys/src/cmd/upas/smtp/mxdial.c:dial_string_parse
/sys/src/cmd/upas/smtp/mxdial.c:expand_meta
/sys/src/cmd/upas/smtp/mxdial.c:mxlookup
/sys/src/cmd/upas/smtp/mxdial.c:mxlookup1
/sys/src/cmd/upas/smtp/mxdial.c:timeout
/sys/src/cmd/upas/smtp/smtp.c:main
|