I assume that the unix socket API is slightly different.:
man unix
The LOCAL_CREDS option may be enabled on a SOCK_DGRAM or a SOCK_STREAM
socket. This option provides a mechanism for the receiver to receive the
credentials of the process as a recvmsg(2) control message. The msg_con-
trol field in the msghdr structure points to a buffer that contains a
cmsghdr structure followed by a variable length sockcred structure,
defined in <sys/socket.h> as follows:
struct sockcred {
uid_t sc_uid; /* real user id */
uid_t sc_euid; /* effective user id */
gid_t sc_gid; /* real group id */
gid_t sc_egid; /* effective group id */
int sc_ngroups; /* number of supplemental groups */
gid_t sc_groups[1]; /* variable length */
};
The LOCAL_PEEREID option may be used with getsockopt(2) to get the PID
and effective user and group IDs of a SOCK_STREAM peer when it did
connect(2) or bind(2). The returned structure is
struct unpcbid {
pid_t unp_pid; /* process id */
uid_t unp_euid; /* effective user id */
gid_t unp_egid; /* effective group id */
};
as defined in <sys/un.h>.
The SOCKCREDSIZE() macro computes the size of the sockcred structure for
a specified number of groups. The cmsghdr fields have the following val-
ues:
cmsg_len = sizeof(struct cmsghdr) + SOCKCREDSIZE(ngroups)
cmsg_level = SOL_SOCKET
cmsg_type = SCM_CREDS