提交 ba472aaf 编写于 作者: A Alex Beregszaszi

implement ff_socket_nonblock and use it in networking code

Originally committed as revision 8846 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 8da4034f
...@@ -440,7 +440,7 @@ static int socket_open_listen(struct sockaddr_in *my_addr) ...@@ -440,7 +440,7 @@ static int socket_open_listen(struct sockaddr_in *my_addr)
closesocket(server_fd); closesocket(server_fd);
return -1; return -1;
} }
fcntl(server_fd, F_SETFL, O_NONBLOCK); ff_socket_nonblock(server_fd, 1);
return server_fd; return server_fd;
} }
...@@ -649,7 +649,7 @@ static void new_connection(int server_fd, int is_rtsp) ...@@ -649,7 +649,7 @@ static void new_connection(int server_fd, int is_rtsp)
&len); &len);
if (fd < 0) if (fd < 0)
return; return;
fcntl(fd, F_SETFL, O_NONBLOCK); ff_socket_nonblock(fd, 1);
/* XXX: should output a warning page when coming /* XXX: should output a warning page when coming
close to the connection limit */ close to the connection limit */
......
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#define ff_neterrno() errno #define ff_neterrno() errno
#define FF_NETERROR(err) err #define FF_NETERROR(err) err
int ff_socket_nonblock(int socket, int enable);
#if !defined(HAVE_INET_ATON) #if !defined(HAVE_INET_ATON)
/* in os_support.c */ /* in os_support.c */
int inet_aton (const char * str, struct in_addr * add); int inet_aton (const char * str, struct in_addr * add);
......
...@@ -114,6 +114,14 @@ int resolve_host(struct in_addr *sin_addr, const char *hostname) ...@@ -114,6 +114,14 @@ int resolve_host(struct in_addr *sin_addr, const char *hostname)
} }
return 0; 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 */ #endif /* CONFIG_NETWORK */
#ifdef CONFIG_FFSERVER #ifdef CONFIG_FFSERVER
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
#include <unistd.h> #include <unistd.h>
#include "network.h" #include "network.h"
#include <sys/time.h> #include <sys/time.h>
#include <fcntl.h>
typedef struct TCPContext { typedef struct TCPContext {
int fd; int fd;
...@@ -62,7 +61,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ...@@ -62,7 +61,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
fd = socket(AF_INET, SOCK_STREAM, 0); fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) if (fd < 0)
goto fail; goto fail;
fcntl(fd, F_SETFL, O_NONBLOCK); ff_socket_nonblock(fd, 1);
redo: redo:
ret = connect(fd, (struct sockaddr *)&dest_addr, ret = connect(fd, (struct sockaddr *)&dest_addr,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册