summaryrefslogtreecommitdiff
path: root/minecctl/misc.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-07-01 21:47:14 +0200
committerDavid Härdeman <david@hardeman.nu>2020-07-01 21:47:14 +0200
commit43830ce2bff25a9acca4268ffaa3a681ac3afec2 (patch)
treea6bfd06bbac5be2bff59a41a47a5ccdf169f3ad2 /minecctl/misc.c
parent7e728d971b95f115c7e9c2def21815034d9bde54 (diff)
Teach connect_any to report the address it connected to in order to improve dbg messages
Diffstat (limited to 'minecctl/misc.c')
-rw-r--r--minecctl/misc.c30
1 files changed, 15 insertions, 15 deletions
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;
}