From 43830ce2bff25a9acca4268ffaa3a681ac3afec2 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 1 Jul 2020 21:47:14 +0200 Subject: Teach connect_any to report the address it connected to in order to improve dbg messages --- minecctl/misc.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'minecctl/misc.c') diff --git a/minecctl/misc.c b/minecctl/misc.c index 6562b14..143b0cc 100644 --- a/minecctl/misc.c +++ b/minecctl/misc.c @@ -117,43 +117,43 @@ void strv_free(char **strv) xfree(strv); } -int connect_any(struct list_head *addrs, bool may_fail) +int connect_any(struct list_head *addrs, struct saddr **rsaddr, + const char **error) { struct saddr *saddr; - bool connected = false; int sfd; - /* FIXME: check callers and coordinate debug msg */ if (list_empty(addrs)) { - if (may_fail) - return -1; - else - die("No address to connect to"); + *error = "no address to connect to"; + return -1; } list_for_each_entry(saddr, addrs, list) { verbose("Attempting connection to %s", saddr->addrstr); - sfd = socket(saddr->st.ss_family, SOCK_STREAM | SOCK_CLOEXEC, - 0); - if (sfd < 0) - die("socket: %m"); + sfd = socket(saddr->st.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (sfd < 0) { + *error = "failed to create socket"; + return -1; + } socket_set_low_latency(sfd, true, true, true); if (connect(sfd, (struct sockaddr *)&saddr->st, saddr->addrlen) < 0) { close(sfd); + sfd = -1; continue; } - connected = true; + if (rsaddr) + *rsaddr = saddr; break; } - if (!connected && may_fail) + if (sfd < 0) { + *error = "failed to connect to remote host"; return -1; - else if (!connected) - die("Failed to connect to remote host"); + } return sfd; } -- cgit v1.2.3