dial: freeaddrinfo on failure on reconnect - irc - IRC client based on c9x.me/i… | |
git clone git://git.codemadness.org/irc | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3f3d05fe79f64a4312664e8607d5bd71b3e73b52 | |
parent 2f85ad5b356490f957cd52d81f55624eff08bdd7 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Mon, 31 Jul 2017 18:28:05 +0200 | |
dial: freeaddrinfo on failure on reconnect | |
Diffstat: | |
M irc.c | 28 +++++++++++++++++++--------- | |
1 file changed, 19 insertions(+), 9 deletions(-) | |
--- | |
diff --git a/irc.c b/irc.c | |
@@ -234,6 +234,7 @@ static char * | |
dial(const char *host, const char *service) | |
{ | |
struct addrinfo hints, *res = NULL, *rp; | |
+ char *err = 0; | |
int fd = -1, e; | |
memset(&hints, 0, sizeof(hints)); | |
@@ -251,19 +252,28 @@ dial(const char *host, const char *service) | |
} | |
break; | |
} | |
- if (fd == -1) | |
- return "Cannot connect to host."; | |
+ if (fd == -1) { | |
+ err = "Cannot connect to host."; | |
+ goto fail; | |
+ } | |
srv.fd = fd; | |
if (ssl) { | |
- if (tls_init() < 0) | |
- return "Could not initialize TLS."; | |
- if (!(srv.tls = tls_client())) | |
- return "Could not initialize TLS context."; | |
- if (tls_connect_socket(srv.tls, srv.fd, host) < 0) | |
- return "Could not connect with ssl."; | |
+ if (tls_init() < 0) { | |
+ err = "Could not initialize TLS."; | |
+ goto fail; | |
+ } | |
+ if (!(srv.tls = tls_client())) { | |
+ err = "Could not initialize TLS context."; | |
+ goto fail; | |
+ } | |
+ if (tls_connect_socket(srv.tls, srv.fd, host) < 0) { | |
+ err = "Could not connect with ssl."; | |
+ goto fail; | |
+ } | |
} | |
+fail: | |
freeaddrinfo(res); | |
- return 0; | |
+ return err; | |
} | |
static void |