On Sunday, 8 September 2024 22:46:05 CEST noahbpeterson1997@gmail.com wrote: > diff --git a/netsock.c b/netsock.c > index feed21d..04f95c7 100644 > --- a/netsock.c > +++ b/netsock.c > @@ -322,7 +322,23 @@ 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"); > + if (errno == EADDRNOTAVAIL) > + fprintf(stderr, "can't bind to interface %s; " > + "expected ipv6 address not found: " > + "%02x%02x::%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", > + interface->interface, > + (int)interface->address.ipv6.s6_addr[0], > + (int)interface->address.ipv6.s6_addr[1], > + (int)interface->address.ipv6.s6_addr[8], > + (int)interface->address.ipv6.s6_addr[9], > + (int)interface->address.ipv6.s6_addr[10], > + (int)interface->address.ipv6.s6_addr[11], > + (int)interface->address.ipv6.s6_addr[12], > + (int)interface->address.ipv6.s6_addr[13], > + (int)interface->address.ipv6.s6_addr[14], > + (int)interface->address.ipv6.s6_addr[15]); > + else > + perror("can't bind"); > goto err; > } Ehrm, no - this is not a valid way to print IPv6 addresses and it makes to many assumptions about the IPv6 address - which will then lead to more problems in the future. For creating the ip address string: char ipstr_buf[INET6_ADDRSTRLEN]; const char *ipstr; .... ipstr = inet_ntop(AF_INET6, &interface->address.ipv6.s6_addr, ipstr_buf, INET6_ADDRSTRLEN); Kind regards, Sven