aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/tcp.c
diff options
context:
space:
mode:
authorAlexander S. Drozdov <adrozdoff@gmail.com>2015-09-11 16:31:44 +1000
committerMichael Niedermayer <michael@niedermayer.cc>2015-09-11 21:44:30 +0200
commit6a8d58d69309d27402714caeaf92a7270e0f2a84 (patch)
tree08fc9ae7901205146aefc4a4c9b4474890dfe84d /libavformat/tcp.c
parentf600381b79efde4a278d261753f4cc5dc25d2a46 (diff)
downloadffmpeg-6a8d58d69309d27402714caeaf92a7270e0f2a84.tar.gz
avformat/tcp: TCP Protocol: fix descriptor leak on listen and interrupt
If we try to listen on TCP port and ff_listen() fails on interrupt callback socket (bind) descriptor overwrites and does not closed at all. As a result, we can't rebind to the same port. Reviewed-by: Stephan Holljes <klaxa1337@googlemail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/tcp.c')
-rw-r--r--libavformat/tcp.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libavformat/tcp.c b/libavformat/tcp.c
index bee349ecd5..e02c64b800 100644
--- a/libavformat/tcp.c
+++ b/libavformat/tcp.c
@@ -132,11 +132,11 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
goto fail1;
} else if (s->listen == 1) {
// single client
- if ((fd = ff_listen_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen,
- s->listen_timeout, h)) < 0) {
- ret = fd;
+ if ((ret = ff_listen_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen,
+ s->listen_timeout, h)) < 0)
goto fail1;
- }
+ // Socket descriptor already closed here. Safe to overwrite to client one.
+ fd = ret;
} else {
if ((ret = ff_listen_connect(fd, cur_ai->ai_addr, cur_ai->ai_addrlen,
s->open_timeout / 1000, h, !!cur_ai->ai_next)) < 0) {