diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-09 22:10:38 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-09 22:40:12 +0200 |
commit | f8911b987de4a84ff8ae92f41ff492ece4acadb9 (patch) | |
tree | 0ebda51a6ba23d790da30a7168870928954da395 /libavformat/tcp.c | |
parent | bf5386385dc504a076453ad58f61f808677be747 (diff) | |
parent | 5467742232c312b7d61dca7ac57447f728d8d6c9 (diff) | |
download | ffmpeg-f8911b987de4a84ff8ae92f41ff492ece4acadb9.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
mss3: use standard zigzag table
mss3: split DSP functions that are used in MTS2(MSS4) into separate file
motion-test: do not use getopt()
tcp: add initial timeout limit for incoming connections
configure: Change the rdtsc check to a linker check
avconv: propagate fatal errors from lavfi.
lavfi: add error handling to filter_samples().
fate-run: make avconv() properly deal with multiple inputs.
asplit: don't leak the input buffer.
af_resample: fix request_frame() behavior.
af_asyncts: fix request_frame() behavior.
libx264: support aspect ratio switching
matroskadec: honor error_recognition when encountering unknown elements.
lavr: resampling: add support for s32p, fltp, and dblp internal sample formats
lavr: resampling: add filter type and Kaiser window beta to AVOptions
lavr: Use AV_SAMPLE_FMT_NONE to auto-select the internal sample format
lavr: mix: validate internal sample format in ff_audio_mix_init()
Conflicts:
ffmpeg.c
ffplay.c
libavcodec/libx264.c
libavfilter/audio.c
libavfilter/split.c
libavformat/tcp.c
tests/fate-run.sh
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/tcp.c')
-rw-r--r-- | libavformat/tcp.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 42dcee0c16..70a50159eb 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -43,7 +43,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) char buf[256]; int ret; socklen_t optlen; - int timeout = 50; + int timeout = 50, listen_timeout = -1; char hostname[1024],proto[1024],path[1024]; char portstr[10]; @@ -59,6 +59,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags) if (av_find_info_tag(buf, sizeof(buf), "timeout", p)) { timeout = strtol(buf, NULL, 10); } + if (av_find_info_tag(buf, sizeof(buf), "listen_timeout", p)) { + listen_timeout = strtol(buf, NULL, 10); + } } hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; @@ -87,6 +90,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) if (listen_socket) { int fd1; int reuse = 1; + struct pollfd lp = { fd, POLLIN, 0 }; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); ret = bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen); if (ret) { @@ -98,6 +102,11 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ret = ff_neterrno(); goto fail1; } + ret = poll(&lp, 1, listen_timeout >= 0 ? listen_timeout : -1); + if (ret <= 0) { + ret = AVERROR(ETIMEDOUT); + goto fail1; + } fd1 = accept(fd, NULL, NULL); if (fd1 < 0) { ret = ff_neterrno(); |