network: Use SOCK_CLOEXEC when available
authorLuca Barbato <lu_zero@gentoo.org>
Sat, 3 Aug 2013 13:00:11 +0000 (15:00 +0200)
committerLuca Barbato <lu_zero@gentoo.org>
Mon, 5 Aug 2013 14:13:36 +0000 (16:13 +0200)
libavformat/network.h
libavformat/sctp.c
libavformat/tcp.c
libavformat/udp.c
libavformat/unix.c

index fe136c4..99d96af 100644 (file)
@@ -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 */
index 42dd547..66b31cc 100644 (file)
@@ -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;
 
index 67aebdf..68bf9f1 100644 (file)
@@ -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;
index 66399b7..bfa8cf2 100644 (file)
@@ -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");
     }
index 167efab..09f3d68 100644 (file)
@@ -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) {