Repository : ssh://git@diktynna/alfred On branches: main,main
commit 6a0188e12685b576ac56f51609f38af92e482997 Author: Noah Peterson NoahBPeterson1997@gmail.com Date: Tue Sep 10 13:05:04 2024 -0600
alfred: add more verbose error message
There is an issue with some Linux distributions where network interfaces are up and active, but do not have the correct link-local address. This condition is now checked and output to stderr to better help users troubleshoot this issue.
Signed-off-by: Noah Peterson noahbpeterson1997@gmail.com Signed-off-by: Sven Eckelmann sven@narfation.org
6a0188e12685b576ac56f51609f38af92e482997 netsock.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/netsock.c b/netsock.c index feed21d..95dbf5e 100644 --- a/netsock.c +++ b/netsock.c @@ -21,6 +21,7 @@ #include <sys/types.h> #include <stdlib.h> #include <sys/epoll.h> +#include <arpa/inet.h> #ifdef CONFIG_ALFRED_CAPABILITIES #include <sys/capability.h> #endif @@ -322,7 +323,19 @@ static int netsock_open(struct globals *globals, struct interface *interface) enable_raw_bind_capability(0);
if (bind(sock, (struct sockaddr *)&sin6, sizeof(sin6)) < 0) { - perror("can't bind"); + char ipstr_buf[INET6_ADDRSTRLEN]; + const char *ipstr; + + ipstr = inet_ntop(AF_INET6, &interface->address.ipv6.s6_addr, + ipstr_buf, INET6_ADDRSTRLEN); + + if (errno == EADDRNOTAVAIL) + fprintf(stderr, "can't bind to interface %s; " + "expected ipv6 address not found: %s\n", + interface->interface, + ipstr); + else + perror("can't bind"); goto err; }