mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-23 19:49:56 +00:00
ff_socket: put out-of-line and fallback to fcntl() for close-on-exec
This supports non-Linux systems (SOCK_CLOEXEC is non-standard) and older Linux kernels to the extent possible. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
fa09e76010
commit
9d5ec50ead
@ -18,6 +18,7 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include "network.h"
|
||||
#include "url.h"
|
||||
#include "libavcodec/internal.h"
|
||||
@ -210,6 +211,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)
|
||||
{
|
||||
|
@ -249,13 +249,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user