On Sat Sep 5, 2026 at 12:35 PM CEST, Stuart Henderson wrote: > On 2026/09/04 23:38, Alvar Penning wrote: >> Since this should never could have worked, I have removed the call in my >> diff. > > Seems reasoanble-ish - the equivalent would be something using IPV6_TCLASS ..
My main goal was to unbreak the package, but you are right. I reworked the diff for different setsockopt(2) calls based on the socket family. Since this might also affect others, I also brought this upstream: https://github.com/ngircd/ngircd/pull/346 Best, Alvar diff --git Makefile Makefile index 18929caadd2..099ff908503 100644 --- Makefile +++ Makefile @@ -1,6 +1,6 @@ COMMENT = lightweight irc server -DISTNAME = ngircd-27 +DISTNAME = ngircd-28 CATEGORIES = net diff --git distinfo distinfo index f7d160ce0dc..2ab15caa713 100644 --- distinfo +++ distinfo @@ -1,2 +1,2 @@ -SHA256 (ngircd-27.tar.gz) = /TjvITOdr4HWr0pjC6Oy3lGhtCwYGEPud2NaWmYf5zw= -SIZE (ngircd-27.tar.gz) = 554709 +SHA256 (ngircd-28.tar.gz) = 1K5dT18T0Tb3fnqv8s3ID807mhcawxworbri9GQ8BKg= +SIZE (ngircd-28.tar.gz) = 564580 diff --git patches/patch-src_ngircd_conn_c patches/patch-src_ngircd_conn_c new file mode 100644 index 00000000000..d1747acfad3 --- /dev/null +++ patches/patch-src_ngircd_conn_c @@ -0,0 +1,61 @@ +Index: src/ngircd/conn.c +--- src/ngircd/conn.c.orig ++++ src/ngircd/conn.c +@@ -2186,6 +2186,7 @@ static bool + Init_Socket( int Sock ) + { + int value; ++ socklen_t l; + + if (!io_setnonblock(Sock)) { + Log(LOG_CRIT, "Can't enable non-blocking mode for socket: %s!", +@@ -2205,15 +2206,40 @@ Init_Socket( int Sock ) + + /* Set type of service (TOS) */ + #if defined(IPPROTO_IP) && defined(IPTOS_LOWDELAY) +- value = IPTOS_LOWDELAY; +- if (setsockopt(Sock, IPPROTO_IP, IP_TOS, &value, +- (socklen_t) sizeof(value))) { +- LogDebug("Can't set socket option IP_TOS: %s!", +- strerror(errno)); +- /* ignore this error */ +- } else +- LogDebug("IP_TOS on socket %d has been set to IPTOS_LOWDELAY.", +- Sock); ++ l = (socklen_t)sizeof(value); ++ if (getsockopt(Sock, SOL_SOCKET, SO_DOMAIN, &value, &l) != 0) { ++ Log(LOG_ERR, "Can't get socket familiy: %s!", ++ strerror(errno)); ++ } else { ++ switch (value) { ++ case AF_INET: ++ value = IPTOS_LOWDELAY; ++ if (setsockopt(Sock, IPPROTO_IP, IP_TOS, &value, ++ (socklen_t) sizeof(value))) { ++ Log(LOG_ERR, "Can't set socket option IP_TOS: %s!", ++ strerror(errno)); ++ } else { ++ LogDebug("IP_TOS on socket %d has been set to %d.", ++ Sock, value); ++ } ++ break; ++ ++ case AF_INET6: ++ value = IPTOS_LOWDELAY; ++ if (setsockopt(Sock, IPPROTO_IPV6, IPV6_TCLASS, &value, ++ (socklen_t) sizeof(value))) { ++ Log(LOG_ERR, "Can't set socket option IPV6_TCLASS: %s!", ++ strerror(errno)); ++ } else { ++ LogDebug("IPV6_TCLASS on socket %d has been set to %d.", ++ Sock, value); ++ } ++ break; ++ ++ default: ++ Log(LOG_ERR, "Unexpected socket familiy %d", value); ++ } ++ } + #endif + + return true;
