add alarm timer in case connection hangs without triggering a connect timeout - hurl - Gopher/HTTP/HTTPS file grabber (HTM) git clone git://git.codemadness.org/hurl (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit e5399e327f21a6033de0decb3c8588a17a63eea8 (DIR) parent e0b2498d20b2082339ac02a098b40a11bdbe3ab7 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Fri, 22 May 2020 21:32:48 +0200 add alarm timer in case connection hangs without triggering a connect timeout Noticed on a (broken?) snapshot version on OpenBSD -current with libtls. Should make the time-out behaviour more reliable regardless. Diffstat: M hurl.c | 12 ++++++++++++ 1 file changed, 12 insertions(+), 0 deletions(-) --- (DIR) diff --git a/hurl.c b/hurl.c @@ -6,6 +6,7 @@ #include <errno.h> #include <netdb.h> #include <locale.h> +#include <signal.h> #include <stdarg.h> #include <stdio.h> #include <stdint.h> @@ -54,6 +55,13 @@ static char *url; /* TLS config */ static struct tls_config *tls_config; +void +sighandler(int signo) +{ + if (signo == SIGALRM) + _exit(2); +} + int parseuri(const char *s, struct uri *u) { @@ -525,6 +533,10 @@ main(int argc, char **argv) if (parseuri(url, &u) == -1) errx(1, "invalid url: %s", url); + signal(SIGALRM, sighandler); + if (alarm(config_timeout) == -1) + err(1, "alarm"); + if (!strcmp(u.proto, "https")) { if (tls_init()) errx(1, "tls_init failed");