--- utils/sc_rxifd/sc_rxifd.c.orig 2026-06-10 14:04:50.000000000 +0800 +++ utils/sc_rxifd/sc_rxifd.c 2026-07-15 18:28:39.000000000 +0800 @@ -42,10 +42,9 @@ #endif /* HAVE_QUIC or TEST_RXIFD_H3_REQUEST */ #ifndef TEST_RXIFD_H3_REQUEST -#if defined(IP_PKTINFO) || \ - (defined(IP_RECVIF) && defined(IP_RECVDSTADDR) && defined(IP_SENDSRCADDR)) +#if defined(IP_PKTINFO) || (defined(IP_RECVIF) && defined(IP_RECVDSTADDR)) #define HAVE_RXIF4 -#endif /* IP_PKTINFO or (IP_RECVIF, IP_RECVDSTADDR, IP_SENDSRCADDR) */ +#endif /* IP_PKTINFO or (IP_RECVIF, IP_RECVDSTADDR) */ #if defined(IPV6_PKTINFO) #define HAVE_RXIF6 @@ -917,7 +916,11 @@ cmsg = CMSG_FIRSTHDR(&msg); cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr)); cmsg->cmsg_level = IPPROTO_IP; +#if defined(IP_SENDSRCADDR) cmsg->cmsg_type = IP_SENDSRCADDR; +#else + cmsg->cmsg_type = IP_RECVDSTADDR; +#endif /* IP_SENDSRCADDR */ memcpy(CMSG_DATA(cmsg), us, sizeof(struct in_addr)); #endif /* IP_PKTINFO, IP_RECVDSTADDR */ @@ -1944,15 +1947,19 @@ continue; if(them_ss.ss_family == AF_INET) { +#ifdef HAVE_RXIF4 udp4_send(quic4, txbuf, msg.data_len, &((struct sockaddr_in *)&us_ss)->sin_addr, (struct sockaddr_in *)&them_ss); +#endif /* HAVE_RXIF4 */ } else { +#ifdef HAVE_RXIF6 udp6_send(quic6, txbuf, msg.data_len, &((struct sockaddr_in6 *)&us_ss)->sin6_addr, (struct sockaddr_in6 *)&them_ss); +#endif /* HAVE_RXIF6 */ } } } @@ -2583,7 +2590,11 @@ #endif /* HAVE_RXIF4 */ #ifdef HAVE_RXIF6 +#ifdef OPT_IPV4 if((options & OPT_IPV4) == 0) +#else + if(1) /* IPv4 unavailable; always open IPv6 socket */ +#endif /* OPT_IPV4 */ { dns6 = udp6_open(dns_port); if(socket_isinvalid(dns6))