From cc227c7270cfc3ba47f988df3cdaf232a41a8f34 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Mon, 21 Jan 2008 17:12:41 +0000 Subject: [PATCH] Set non-blocking mode on accepted sockets --- include/vlc_network.h | 3 +++ modules/control/telnet.c | 2 +- src/network/httpd.c | 6 ++++-- src/network/tcp.c | 23 +++++++++++++++++------ 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/include/vlc_network.h b/include/vlc_network.h index d03a9243d4..1e4d8f73c0 100644 --- a/include/vlc_network.h +++ b/include/vlc_network.h @@ -86,6 +86,9 @@ static inline int __net_ConnectTCP (vlc_object_t *obj, const char *host, int por return __net_Connect (obj, host, port, SOCK_STREAM, IPPROTO_TCP); } + +VLC_EXPORT( int, net_AcceptSingle, (vlc_object_t *obj, int lfd) ); + #define net_Accept(a, b, c) __net_Accept(VLC_OBJECT(a), b, c) VLC_EXPORT( int, __net_Accept, ( vlc_object_t *, int *, mtime_t ) ); diff --git a/modules/control/telnet.c b/modules/control/telnet.c index e53e8e5eec..31fe2e466b 100644 --- a/modules/control/telnet.c +++ b/modules/control/telnet.c @@ -490,7 +490,7 @@ static void Run( intf_thread_t *p_intf ) if (ufd[ncli + i].revents == 0) continue; - fd = accept (ufd[ncli + i].fd, NULL, NULL); + fd = net_AcceptSingle (VLC_OBJECT(p_intf), ufd[ncli + i].fd); if (fd == -1) continue; diff --git a/src/network/httpd.c b/src/network/httpd.c index 5504b3b76a..9d7d57406c 100644 --- a/src/network/httpd.c +++ b/src/network/httpd.c @@ -2509,17 +2509,19 @@ static void httpd_HostThread( httpd_host_t *host ) { httpd_client_t *cl; int i_state = -1; + int fd = ufd[nfd].fd; - assert (ufd[nfd].fd == host->fds[nfd]); + assert (fd == host->fds[nfd]); if( ufd[nfd].revents == 0 ) continue; /* */ - int fd = accept (ufd[nfd].fd, NULL, NULL); + fd = accept (fd, NULL, NULL); if (fd == -1) continue; + net_SetupSocket (fd); if( p_tls != NULL ) { switch( tls_ServerSessionHandshake( p_tls, fd ) ) diff --git a/src/network/tcp.c b/src/network/tcp.c index c7766f9575..2f851555f7 100644 --- a/src/network/tcp.c +++ b/src/network/tcp.c @@ -258,6 +258,22 @@ next_ai: /* failure */ } +int net_AcceptSingle (vlc_object_t *obj, int lfd) +{ + int fd = accept (lfd, NULL, NULL); + if (fd == -1) + { + if (net_errno != EAGAIN) + msg_Err (obj, "accept failed (from socket %d): %m", lfd); + return -1; + } + + msg_Dbg (obj, "accepted socket %d (from socket %d)", fd, lfd); + net_SetupSocket (fd); + return 0; +} + + /***************************************************************************** * __net_Accept: ***************************************************************************** @@ -312,13 +328,9 @@ int __net_Accept( vlc_object_t *p_this, int *pi_fd, mtime_t i_wait ) continue; int sfd = ufd[i].fd; - int fd = accept (sfd, NULL, NULL); + int fd = net_AcceptSingle (p_this, sfd); if (fd == -1) - { - msg_Err (p_this, "accept failed (%m)"); continue; - } - net_SetupSocket (fd); /* * Move listening socket to the end to let the others in the @@ -327,7 +339,6 @@ int __net_Accept( vlc_object_t *p_this, int *pi_fd, mtime_t i_wait ) memmove (pi_fd + i, pi_fd + i + 1, n - (i + 1)); pi_fd[n - 1] = sfd; vlc_object_unlock (p_this); - msg_Dbg (p_this, "accepted socket %d (from socket %d)", fd, sfd); return fd; } } -- 2.39.2