package main import ( "net" "syscall" ) func uidPair(conn *net.UnixConn) (int, error) { brut, err := conn.SyscallConn() if err != nil { return -1, err } var cred *syscall.Ucred var errCred error if err := brut.Control(func(fd uintptr) { cred, errCred = syscall.GetsockoptUcred(int(fd), syscall.SOL_SOCKET, syscall.SO_PEERCRED) }); err != nil { return -1, err } if errCred != nil { return -1, errCred } return int(cred.Uid), nil }