diff --git a/internal/socket/rawconn.go b/internal/socket/rawconn.go index 87e81071c..f0b426632 100644 --- a/internal/socket/rawconn.go +++ b/internal/socket/rawconn.go @@ -44,6 +44,15 @@ type ipConn interface { var _ ipConn = (*net.IPConn)(nil) +// unixConn is an interface implemented by net.UnixConn. +// It can be used for interface assertions to check if a net.Conn is a Unix connection. +type unixConn interface { + SyscallConn() (syscall.RawConn, error) + ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *net.UnixAddr, err error) +} + +var _ unixConn = (*net.UnixConn)(nil) + // NewConn returns a new raw connection. func NewConn(c net.Conn) (*Conn, error) { var err error @@ -58,6 +67,9 @@ func NewConn(c net.Conn) (*Conn, error) { case ipConn: cc.network = "ip" cc.c, err = c.SyscallConn() + case unixConn: + cc.network = "unix" + cc.c, err = c.SyscallConn() default: return nil, errors.New("unknown connection type") }