mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
* nscd/nscd_helper.c (open_socket): Use SOCK_CLOEXEC and
SOCK_NONBLOCK if possible.
This commit is contained in:
parent
b206d8b166
commit
c418b1ba4c
@ -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.
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user