[SCM] libav/experimental: tcp: Check both wfds and efds when waiting for the result from connect

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:16:01 UTC 2013


The following commit has been merged in the experimental branch:
commit b41626762253e3d08f8a61db36fcbd1766e4de09
Author: Martin Storsjö <martin at martin.st>
Date:   Tue Sep 21 20:17:34 2010 +0000

    tcp: Check both wfds and efds when waiting for the result from connect
    
    On windows, a connection failure doesn't trigger wfds as it does on unix.
    
    This fixes issue 2237, based on code by yeyingxian.
    
    Originally committed as revision 25154 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/tcp.c b/libavformat/tcp.c
index ca4a6b0..12792b5 100644
--- a/libavformat/tcp.c
+++ b/libavformat/tcp.c
@@ -38,7 +38,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
     struct addrinfo hints, *ai, *cur_ai;
     int port, fd = -1;
     TCPContext *s = NULL;
-    fd_set wfds;
+    fd_set wfds, efds;
     int fd_max, ret;
     struct timeval tv;
     socklen_t optlen;
@@ -87,11 +87,13 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
             }
             fd_max = fd;
             FD_ZERO(&wfds);
+            FD_ZERO(&efds);
             FD_SET(fd, &wfds);
+            FD_SET(fd, &efds);
             tv.tv_sec = 0;
             tv.tv_usec = 100 * 1000;
-            ret = select(fd_max + 1, NULL, &wfds, NULL, &tv);
-            if (ret > 0 && FD_ISSET(fd, &wfds))
+            ret = select(fd_max + 1, NULL, &wfds, &efds, &tv);
+            if (ret > 0 && (FD_ISSET(fd, &wfds) || FD_ISSET(fd, &efds)))
                 break;
         }
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list