diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-10 10:18:18 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-10 10:18:18 +0200 |
commit | 296eaa84b9d0659b48014917f99032b3fa725302 (patch) | |
tree | 5646cfaf430551b321c83e301cb69dbf76638cdb | |
parent | 69f543854deb8c31183b20ca72e10e78d3296f53 (diff) | |
parent | 9d5ec50ead97e088d77317e77b18cef06cb3d053 (diff) | |
download | ffmpeg-296eaa84b9d0659b48014917f99032b3fa725302.tar.gz |
Merge commit '9d5ec50ead97e088d77317e77b18cef06cb3d053'
* commit '9d5ec50ead97e088d77317e77b18cef06cb3d053':
ff_socket: put out-of-line and fallback to fcntl() for close-on-exec
Conflicts:
libavformat/network.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/network.c | 21 | ||||
-rw-r--r-- | libavformat/network.h | 9 |
2 files changed, 21 insertions, 9 deletions
diff --git a/libavformat/network.c b/libavformat/network.c index a41b0511e4..73409616cd 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -18,10 +18,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavutil/avutil.h" +#include <fcntl.h> #include "network.h" #include "url.h" #include "libavcodec/internal.h" +#include "libavutil/avutil.h" #include "libavutil/mem.h" #include "url.h" #include "libavutil/time.h" @@ -235,6 +236,24 @@ static int ff_poll_interrupt(struct pollfd *p, nfds_t nfds, int timeout, return ret; } +int ff_socket(int af, int type, int proto) +{ + int fd; + +#ifdef SOCK_CLOEXEC + fd = socket(af, type | SOCK_CLOEXEC, proto); + if (fd == -1 && errno == EINVAL) +#endif + { + fd = socket(af, type, proto); +#if HAVE_FCNTL + if (fd != -1) + fcntl(fd, F_SETFD, FD_CLOEXEC); +#endif + } + return fd; +} + int ff_listen_bind(int fd, const struct sockaddr *addr, socklen_t addrlen, int timeout, URLContext *h) { diff --git a/libavformat/network.h b/libavformat/network.h index 4b5398a12c..c60e1424a1 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -262,13 +262,6 @@ 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); -} +int ff_socket(int domain, int type, int protocol); #endif /* AVFORMAT_NETWORK_H */ |