mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-21 17:40:25 +01:00
Allow EPROTOTYPE for SOCK_CLOEXEC but unsupported by socket/socketpair
If SOCK_CLOEXEC is defined (usually because accept4 is implemented), check for EPROTOTYPE (the POSIX errno for invalid socket types) in addition to EINVAL as errno indicating whether socket and socketpair do not support SOCK_CLOEXEC (and other SOCK_* flags). [adapted by Chengwei Yang to give _dbus_connect_exec() the same treatment] Bug: https://bugs.freedesktop.org/show_bug.cgi?id=69073 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
This commit is contained in:
parent
7a53684d42
commit
c1288c5366
1 changed files with 3 additions and 3 deletions
|
|
@ -139,7 +139,7 @@ _dbus_open_socket (int *fd_p,
|
|||
cloexec_done = *fd_p >= 0;
|
||||
|
||||
/* Check if kernel seems to be too old to know SOCK_CLOEXEC */
|
||||
if (*fd_p < 0 && errno == EINVAL)
|
||||
if (*fd_p < 0 && (errno == EINVAL || errno == EPROTOTYPE))
|
||||
#endif
|
||||
{
|
||||
*fd_p = socket (domain, type, protocol);
|
||||
|
|
@ -898,7 +898,7 @@ _dbus_connect_exec (const char *path,
|
|||
retval = socketpair (AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, fds);
|
||||
cloexec_done = (retval >= 0);
|
||||
|
||||
if (retval < 0 && (errno == EINVAL))
|
||||
if (retval < 0 && (errno == EINVAL || errno == EPROTOTYPE))
|
||||
#endif
|
||||
{
|
||||
retval = socketpair (AF_UNIX, SOCK_STREAM, 0, fds);
|
||||
|
|
@ -3066,7 +3066,7 @@ _dbus_full_duplex_pipe (int *fd1,
|
|||
retval = socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, fds);
|
||||
cloexec_done = retval >= 0;
|
||||
|
||||
if (retval < 0 && errno == EINVAL)
|
||||
if (retval < 0 && (errno == EINVAL || errno == EPROTOTYPE))
|
||||
#endif
|
||||
{
|
||||
retval = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue