gio: don't assume that SOCK_CLOEXEC is supported whenever it's defined

Just because SOCK_CLOEXEC was defined at build time doesn't mean the
kernel we're running on supports it.  So if socket() fails with EINVAL,
try again without the flag.

https://bugzilla.gnome.org/show_bug.cgi?id=624463
This commit is contained in:
Julien Cristau 2010-07-15 15:26:02 +01:00 committed by Dan Winship
parent 8a2d157d49
commit 732ff1b27c

View File

@ -455,9 +455,11 @@ g_socket_create_socket (GSocketFamily family,
}
#ifdef SOCK_CLOEXEC
native_type |= SOCK_CLOEXEC;
fd = socket (family, native_type | SOCK_CLOEXEC, protocol);
/* It's possible that libc has SOCK_CLOEXEC but the kernel does not */
if (fd < 0 && errno == EINVAL)
#endif
fd = socket (family, native_type, protocol);
fd = socket (family, native_type, protocol);
if (fd < 0)
{