* nscd/nscd_helper.c (open_socket): Use SOCK_CLOEXEC and

SOCK_NONBLOCK if possible.
This commit is contained in:
Ulrich Drepper 2008-07-25 18:31:07 +00:00
parent b206d8b166
commit c418b1ba4c
2 changed files with 31 additions and 3 deletions

View File

@ -1,5 +1,8 @@
2008-07-25 Ulrich Drepper <drepper@redhat.com>
* nscd/nscd_helper.c (open_socket): Use SOCK_CLOEXEC and
SOCK_NONBLOCK if possible.
* sysdeps/unix/sysv/linux/opensock.c (__opensock): Use
SOCK_CLOEXEC if available.

View File

@ -33,6 +33,7 @@
#include <sys/un.h>
#include <not-cancel.h>
#include <nis/rpcsvc/nis.h>
#include <kernel-features.h>
#include "nscd-client.h"
@ -161,7 +162,26 @@ __readvall (int fd, const struct iovec *iov, int iovcnt)
static int
open_socket (request_type type, const char *key, size_t keylen)
{
int sock = __socket (PF_UNIX, SOCK_STREAM, 0);
int sock;
#ifdef SOCK_CLOEXEC
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec >= 0)
# endif
{
sock = __socket (PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec == 0)
__have_sock_cloexec = sock != -1 || errno != EINVAL ? 1 : -1;
# endif
}
#endif
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_CLOEXEC
if (__have_sock_cloexec < 0)
# endif
sock = __socket (PF_UNIX, SOCK_STREAM, 0);
#endif
if (sock < 0)
return -1;
@ -172,8 +192,13 @@ open_socket (request_type type, const char *key, size_t keylen)
} reqdata;
size_t real_sizeof_reqdata = sizeof (request_header) + keylen;
/* Make socket non-blocking. */
__fcntl (sock, F_SETFL, O_RDWR | O_NONBLOCK);
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_NONBLOCK
if (__have_sock_cloexec < 0)
# endif
/* Make socket non-blocking. */
__fcntl (sock, F_SETFL, O_RDWR | O_NONBLOCK);
#endif
struct sockaddr_un sun;
sun.sun_family = AF_UNIX;