diff options
| -rw-r--r-- | libglusterfs/src/libglusterfs.sym | 1 | ||||
| -rw-r--r-- | libglusterfs/src/syscall.c | 14 | ||||
| -rw-r--r-- | libglusterfs/src/syscall.h | 3 | ||||
| -rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 6 | 
4 files changed, 21 insertions, 3 deletions
diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index 63022d6d92e..18c9fff34a2 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -1051,6 +1051,7 @@ sys_unlink  sys_utimensat  sys_write  sys_writev +sys_socket  tbf_init  tbf_throttle  timespec_now diff --git a/libglusterfs/src/syscall.c b/libglusterfs/src/syscall.c index a3bc9189257..dd504f734fc 100644 --- a/libglusterfs/src/syscall.c +++ b/libglusterfs/src/syscall.c @@ -727,3 +727,17 @@ sys_fallocate(int fd, int mode, off_t offset, off_t len)      errno = ENOSYS;      return -1;  } + +int +sys_socket(int domain, int type, int protocol) +{ +#ifdef SOCK_CLOEXEC +    return socket(domain, type | SOCK_CLOEXEC, protocol); +#endif +    int fd = -1; + +    fd = socket(domain, type, protocol); +    if (fd >= 0) +        fcntl(fd, F_SETFD, FD_CLOEXEC); +    return fd; +} diff --git a/libglusterfs/src/syscall.h b/libglusterfs/src/syscall.h index f691ebdaa53..9bad49edb7c 100644 --- a/libglusterfs/src/syscall.h +++ b/libglusterfs/src/syscall.h @@ -221,4 +221,7 @@ sys_pread(int fd, void *buf, size_t count, off_t offset);  ssize_t  sys_pwrite(int fd, const void *buf, size_t count, off_t offset); +int +sys_socket(int domain, int type, int protocol); +  #endif /* __SYSCALL_H__ */ diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 94b03f913ab..753722cdb61 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -886,7 +886,7 @@ __socket_server_bind(rpc_transport_t *this)      if (AF_UNIX == SA(&this->myinfo.sockaddr)->sa_family) {          memcpy(&unix_addr, SA(&this->myinfo.sockaddr),                 this->myinfo.sockaddr_len); -        reuse_check_sock = socket(AF_UNIX, SOCK_STREAM, 0); +        reuse_check_sock = sys_socket(AF_UNIX, SOCK_STREAM, 0);          if (reuse_check_sock >= 0) {              ret = connect(reuse_check_sock, SA(&unix_addr),                            this->myinfo.sockaddr_len); @@ -3342,7 +3342,7 @@ socket_connect(rpc_transport_t *this, int port)          memcpy(&this->peerinfo.sockaddr, &sock_union.storage, sockaddr_len);          this->peerinfo.sockaddr_len = sockaddr_len; -        priv->sock = socket(sa_family, SOCK_STREAM, 0); +        priv->sock = sys_socket(sa_family, SOCK_STREAM, 0);          if (priv->sock == -1) {              gf_log(this->name, GF_LOG_ERROR, "socket creation failed (%s)",                     strerror(errno)); @@ -3614,7 +3614,7 @@ socket_listen(rpc_transport_t *this)          memcpy(&myinfo->sockaddr, &sockaddr, sockaddr_len);          myinfo->sockaddr_len = sockaddr_len; -        priv->sock = socket(sa_family, SOCK_STREAM, 0); +        priv->sock = sys_socket(sa_family, SOCK_STREAM, 0);          if (priv->sock == -1) {              gf_log(this->name, GF_LOG_ERROR, "socket creation failed (%s)",  | 
