From 4c034e33779160c1292f914716a340b947573afd Mon Sep 17 00:00:00 2001 From: Tony Mountifield Date: Thu, 2 Jul 2026 13:13:53 +0100 Subject: [PATCH] Add setting of sin_len/sin6_len for BSD and macOS --- src/socket.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/socket.cpp b/src/socket.cpp index 09c851d886..a72822e99f 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -166,9 +166,12 @@ void CSocket::Init ( const quint16 iNewPortNumber, const quint16 iNewQosNumber, } #endif + UdpSocketAddrLen = sizeof ( UdpSocketAddr.sa6 ); +#ifdef Q_OS_BSD4 + UdpSocketAddr.sa6.sin6_len = UdpSocketAddrLen; +#endif UdpSocketAddr.sa6.sin6_family = AF_INET6; UdpSocketAddr.sa6.sin6_addr = in6addr_any; - UdpSocketAddrLen = sizeof ( UdpSocketAddr.sa6 ); UdpPort = &UdpSocketAddr.sa6.sin6_port; // where to put the port number @@ -206,9 +209,12 @@ void CSocket::Init ( const quint16 iNewPortNumber, const quint16 iNewQosNumber, #endif // preinitialize socket in address (only the port number is missing) + UdpSocketAddrLen = sizeof ( UdpSocketAddr.sa4 ); +#ifdef Q_OS_BSD4 + UdpSocketAddr.sa4.sin_len = UdpSocketAddrLen; +#endif UdpSocketAddr.sa4.sin_family = AF_INET; UdpSocketAddr.sa4.sin_addr.s_addr = INADDR_ANY; - UdpSocketAddrLen = sizeof ( UdpSocketAddr.sa4 ); UdpPort = &UdpSocketAddr.sa4.sin_port; // where to put the port number @@ -391,6 +397,9 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr // but Windows does not. So use a V4MAPPED address in an AF_INET6 sockaddr, // which works on all platforms. +#ifdef Q_OS_BSD4 + UdpSocketAddr.sa6.sin6_len = sizeof ( UdpSocketAddr.sa6 ); +#endif UdpSocketAddr.sa6.sin6_family = AF_INET6; UdpSocketAddr.sa6.sin6_port = htons ( HostAddr.iPort ); @@ -421,6 +430,9 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr } else { +#ifdef Q_OS_BSD4 + UdpSocketAddr.sa4.sin_len = sizeof ( UdpSocketAddr.sa4 ); +#endif UdpSocketAddr.sa4.sin_family = AF_INET; UdpSocketAddr.sa4.sin_port = htons ( HostAddr.iPort ); UdpSocketAddr.sa4.sin_addr.s_addr = htonl ( HostAddr.InetAddr.toIPv4Address() ); @@ -435,6 +447,9 @@ void CSocket::SendPacket ( const CVector& vecbySendBuf, const CHostAddr } else if ( bIPv6Available ) { +#ifdef Q_OS_BSD4 + UdpSocketAddr.sa6.sin6_len = sizeof ( UdpSocketAddr.sa6 ); +#endif UdpSocketAddr.sa6.sin6_family = AF_INET6; UdpSocketAddr.sa6.sin6_port = htons ( HostAddr.iPort ); inet_pton ( AF_INET6, HostAddr.InetAddr.toString().toLocal8Bit().constData(), &UdpSocketAddr.sa6.sin6_addr );