func SockaddrToIPAndZone(sa unix.Sockaddr) (net.IP, string) {
	switch sa := sa.(type) {
	case *unix.SockaddrInet4:
		ip := make([]byte, 16)
		// V4InV6Prefix
		ip[10] = 0xff
		ip[11] = 0xff
		copy(ip[12:16], sa.Addr[:])
		return ip, ""

	case *unix.SockaddrInet6:
		ip := make([]byte, 16)
		copy(ip, sa.Addr[:])
		return ip, IP6ZoneToString(int(sa.ZoneId))
	}
	return nil, ""
}
// SockaddrToIPAndZone converts a Sockaddr to a net.IP (with optional IPv6 Zone)
// Returns nil if conversion fails.
SockaddrToIPAndZone converts a Sockaddr to a net.IP (with optional IPv6 Zone)
Returns nil if conversion fails.
// SockaddrToIPAndZone converts a Sockaddr to a net . IP ( with optional IPv6 Zone ) // Returns nil if conversion fails .
func SockaddrToIPAndZone(sa unix.Sockaddr) (net.IP, string) {
	switch sa := sa.(type) {
	case *unix.SockaddrInet4:
		ip := make([]byte, 16)
		ip[10] = 0xff
		ip[11] = 0xff
		copy(ip[12:16], sa.Addr[:])
		return ip, ""
	case *unix.SockaddrInet6:
		ip := make([]byte, 16)
		copy(ip, sa.Addr[:])
		return ip, IP6ZoneToString(int(sa.ZoneId))
	}
	return nil, ""
}
func SockaddrToIPAndZone ( sa unix . Sockaddr ) ( net . IP , string ) { switch sa := sa . ( type ) { case * unix . SockaddrInet4 : ip := make ( [ ] byte , 16 ) ip [ 10 ] = 0xff ip [ 11 ] = 0xff copy ( ip [ 12 : 16 ] , sa . Addr [ : ] ) return ip , " " case * unix . SockaddrInet6 : ip := make ( [ ] byte , 16 ) copy ( ip , sa . Addr [ : ] ) return ip , IP6ZoneToString ( int ( sa . ZoneId ) ) } return nil , " " }
SockaddrToIPAndZone converts a Sockaddr to a net.IP (with optional IPv6 Zone)
Returns nil if conversion fails.
SockaddrToIPAndZone converts a Sockaddr to a net . IP ( with optional IPv6 Zone ) Returns nil if conversion fails .
// V4InV6Prefix