I was being annoyed by this bug today. It doesn’t happen often but I suspect when patching the ppp daemon or ISP changes the ppp interface gets a new ID.
strace -p 294339 strace: Process 294339 attached select(7, [4 6], NULL, NULL, {tv_sec=92, tv_usec=146932}) = 0 (Timeout) sendto(4, “XXXXXXXXX"..., 48, 0, {sa_family=AF_INET6, sin6_port=htons(547), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "ff02::1:2", &sin6_addr), sin6_scope_id=13}, 28) = -1 ENETUNREACH (Network is unreachable) getpid() = 294339 sendto(3, "<27>Jun 13 16:15:53 dhcp6c[29433"..., 89, MSG_NOSIGNAL, NULL, 0) = 89 select(7, [4 6], NULL, NULL, {tv_sec=117, tv_usec=240413}^Cstrace: Process 294339 detached <detached …> I’m not 100% sure but if the sin6_scope_id=13 matched the same ID returned by "ip a” it has definitely changed. My current thought is when the error occurs to assume a linked problem and try an ifreset(ifp) then retry the block: dst.sin6_scope_id = ifp->linkid; if (sendto(sock, buf, len, 0, (struct sockaddr *)&dst, sysdep_sa_len((struct sockaddr *)&dst)) == -1) { debug_printf(LOG_ERR, FNAME, "transmit failed: %s", strerror(errno)); goto end; } My first task is to try and reproduce when the family won’t notice. Play for this weekend maybe.