From bb9378251a167ef0116f263912e57f715c1e02ac Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Sat, 3 Aug 2013 15:00:11 +0200 Subject: [PATCH] network: Use SOCK_CLOEXEC when available --- libavformat/network.h | 9 +++++++++ libavformat/sctp.c | 2 +- libavformat/tcp.c | 4 +++- libavformat/udp.c | 2 +- libavformat/unix.c | 2 +- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libavformat/network.h b/libavformat/network.h index fe136c4e47..99d96afda9 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -246,4 +246,13 @@ int ff_listen_connect(int fd, const struct sockaddr *addr, int ff_http_match_no_proxy(const char *no_proxy, const char *hostname); +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + +static inline int ff_socket(int domain, int type, int protocol) +{ + return socket(domain, type | SOCK_CLOEXEC, protocol); +} + #endif /* AVFORMAT_NETWORK_H */ diff --git a/libavformat/sctp.c b/libavformat/sctp.c index 42dd547b67..66b31ccec6 100644 --- a/libavformat/sctp.c +++ b/libavformat/sctp.c @@ -198,7 +198,7 @@ static int sctp_open(URLContext *h, const char *uri, int flags) cur_ai = ai; - fd = socket(cur_ai->ai_family, SOCK_STREAM, IPPROTO_SCTP); + fd = ff_socket(cur_ai->ai_family, SOCK_STREAM, IPPROTO_SCTP); if (fd < 0) goto fail; diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 67aebdfcb8..68bf9f10b1 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -84,7 +84,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags) cur_ai = ai; restart: - fd = socket(cur_ai->ai_family, cur_ai->ai_socktype, cur_ai->ai_protocol); + fd = ff_socket(cur_ai->ai_family, + cur_ai->ai_socktype, + cur_ai->ai_protocol); if (fd < 0) { ret = ff_neterrno(); goto fail; diff --git a/libavformat/udp.c b/libavformat/udp.c index 66399b7093..bfa8cf25e8 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -270,7 +270,7 @@ static int udp_socket_create(UDPContext *s, struct sockaddr_storage *addr, if (res0 == 0) goto fail; for (res = res0; res; res=res->ai_next) { - udp_fd = socket(res->ai_family, SOCK_DGRAM, 0); + udp_fd = ff_socket(res->ai_family, SOCK_DGRAM, 0); if (udp_fd != -1) break; log_net_error(NULL, AV_LOG_ERROR, "socket"); } diff --git a/libavformat/unix.c b/libavformat/unix.c index 167efabf41..09f3d68127 100644 --- a/libavformat/unix.c +++ b/libavformat/unix.c @@ -71,7 +71,7 @@ static int unix_open(URLContext *h, const char *filename, int flags) s->addr.sun_family = AF_UNIX; av_strlcpy(s->addr.sun_path, filename, sizeof(s->addr.sun_path)); - if ((fd = socket(AF_UNIX, s->type, 0)) < 0) + if ((fd = ff_socket(AF_UNIX, s->type, 0)) < 0) return ff_neterrno(); if (s->listen) {