diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2007-04-27 00:41:50 +0000 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2007-04-27 00:41:50 +0000 |
commit | ba472aaf010e69661866decbd3cfde177d8c0ee9 (patch) | |
tree | e5a955ea482a37f9c2651cd195f59072ca8291b3 | |
parent | 8da4034f529f3c5dcc3f95a7d81032cc9be543fb (diff) | |
download | ffmpeg-streaming-ba472aaf010e69661866decbd3cfde177d8c0ee9.zip ffmpeg-streaming-ba472aaf010e69661866decbd3cfde177d8c0ee9.tar.gz |
implement ff_socket_nonblock and use it in networking code
Originally committed as revision 8846 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | ffserver.c | 4 | ||||
-rw-r--r-- | libavformat/network.h | 2 | ||||
-rw-r--r-- | libavformat/os_support.c | 8 | ||||
-rw-r--r-- | libavformat/tcp.c | 3 |
4 files changed, 13 insertions, 4 deletions
@@ -440,7 +440,7 @@ static int socket_open_listen(struct sockaddr_in *my_addr) closesocket(server_fd); return -1; } - fcntl(server_fd, F_SETFL, O_NONBLOCK); + ff_socket_nonblock(server_fd, 1); return server_fd; } @@ -649,7 +649,7 @@ static void new_connection(int server_fd, int is_rtsp) &len); if (fd < 0) return; - fcntl(fd, F_SETFL, O_NONBLOCK); + ff_socket_nonblock(fd, 1); /* XXX: should output a warning page when coming close to the connection limit */ diff --git a/libavformat/network.h b/libavformat/network.h index 7dcbfe2..6ceba41 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -32,6 +32,8 @@ #define ff_neterrno() errno #define FF_NETERROR(err) err +int ff_socket_nonblock(int socket, int enable); + #if !defined(HAVE_INET_ATON) /* in os_support.c */ int inet_aton (const char * str, struct in_addr * add); diff --git a/libavformat/os_support.c b/libavformat/os_support.c index da303be..abee749 100644 --- a/libavformat/os_support.c +++ b/libavformat/os_support.c @@ -114,6 +114,14 @@ int resolve_host(struct in_addr *sin_addr, const char *hostname) } return 0; } + +int ff_socket_nonblock(int socket, int enable) +{ + if (enable) + return fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) | O_NONBLOCK); + else + return fcntl(socket, F_SETFL, fcntl(socket, F_GETFL) & ~O_NONBLOCK); +} #endif /* CONFIG_NETWORK */ #ifdef CONFIG_FFSERVER diff --git a/libavformat/tcp.c b/libavformat/tcp.c index b2f6d37..36b6707 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -22,7 +22,6 @@ #include <unistd.h> #include "network.h" #include <sys/time.h> -#include <fcntl.h> typedef struct TCPContext { int fd; @@ -62,7 +61,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) goto fail; - fcntl(fd, F_SETFL, O_NONBLOCK); + ff_socket_nonblock(fd, 1); redo: ret = connect(fd, (struct sockaddr *)&dest_addr, |