indeed, compared to BSD, Linux traditionally doesn't have sa_len in sockaddr structure.
but with swift we have a superpower to add one:
#if LINUX // put a proper check here
extension sockaddr {
var sa_len: Int {
switch Int32(sa_family) {
case AF_INET: return MemoryLayout<sockaddr_in>.size
case AF_INET6: return MemoryLayout<sockaddr_in6>.size
default: return MemoryLayout<sockaddr_storage>.size // something else
}
}
}
#endif