privops: use SOCK_SEQPACKET sockets when supported

SOCK_SEQPACKET is preferred over SOCK_DGRAM for communication with the
helper as the process will get an error when the other end of the socket
is closed. It's not supported on all platforms.

If SOCK_SEQPACKET is defined, try creating the pair of sockets with this
type first and if that fails, fall back to SOCK_DGRAM.
This commit is contained in:
Miroslav Lichvar 2015-12-08 10:20:20 +01:00
parent 4e32de09a2
commit aa4bf41400

View file

@ -450,7 +450,11 @@ PRV_Initialise(void)
if (have_helper()) if (have_helper())
LOG_FATAL(LOGF_PrivOps, "Helper already running"); LOG_FATAL(LOGF_PrivOps, "Helper already running");
if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sock_pair)) if (
#ifdef SOCK_SEQPACKET
socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sock_pair) &&
#endif
socketpair(AF_UNIX, SOCK_DGRAM, 0, sock_pair))
LOG_FATAL(LOGF_PrivOps, "socketpair() failed : %s", strerror(errno)); LOG_FATAL(LOGF_PrivOps, "socketpair() failed : %s", strerror(errno));
UTI_FdSetCloexec(sock_pair[0]); UTI_FdSetCloexec(sock_pair[0]);