No description
Find a file
Joel Cunningham f3778108d3 tcp: set socket buffer sizes before listen/connect/accept
From e24d95c0e06a878d401ee34fd6742fcaddeeb95f Mon Sep 17 00:00:00 2001
From: Joel Cunningham <joel.cunningham@me.com>
Date: Mon, 9 Jan 2017 13:37:51 -0600
Subject: [PATCH] tcp: set socket buffer sizes before listen/connect/accept

Attempting to set SO_RCVBUF and SO_SNDBUF on TCP sockets after connection
establishment is incorrect and some stacks ignore the set call on the socket at
this point.  This has been observed on MacOS/iOS.  Windows 7 has some peculiar
behavior where setting SO_RCVBUF after applies only if the buffer is increasing
from the default while decreases are ignored.  This is possibly how the incorrect
usage has gone unnoticed

Unix Network Programming Vol. 1: The Sockets Networking API (3rd edition, seciton 7.5):

"When setting the size of the TCP socket receive buffer, the ordering of the
function calls is important.  This is because of TCP's window scale option,
which is exchanged with the peer on SYN segments when the connection is
established. For a client, this means the SO_RCVBUF socket option must be
set before calling connect.  For a server, this means the socket option must
be set for the listening socket before calling listen.  Setting this option
for the connected socket will have no effect whatsoever on the possible window
scale option because accept does not return with the connected socket until
TCP's three-way handshake is complete.  This is why the option must be set on
the listening socket. (The sizes of the socket buffers are always inherited from
the listening socket by the newly created connected socket)"

Signed-off-by: Joel Cunningham <joel.cunningham@me.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-01-26 20:19:18 +01:00
compat compat/atomics: rename header guards 2016-12-02 20:08:54 -03:00
doc avfilter: add abitscope multimedia filter 2017-01-26 16:21:25 +01:00
libavcodec avcodecc/ccaption_dec: remove extra word from long codec description 2017-01-25 12:00:02 +01:00
libavdevice Cosmetics: Reindent after last commit. 2017-01-25 00:55:36 +01:00
libavfilter avfilter: add abitscope multimedia filter 2017-01-26 16:21:25 +01:00
libavformat tcp: set socket buffer sizes before listen/connect/accept 2017-01-26 20:19:18 +01:00
libavresample Bump minor versions after 3.2 branchpoint to seperate release 2016-10-26 20:52:42 +02:00
libavutil avutil/channel_layout: add av_get_extended_channel_layout 2017-01-24 23:51:36 +01:00
libpostproc Bump minor versions after 3.2 branchpoint to seperate release 2016-10-26 20:52:42 +02:00
libswresample swresample/arm: cosmetic fixes 2017-01-13 21:24:25 +01:00
libswscale swscale/swscale: Fix dereference of stride array before null check 2016-12-23 21:47:47 +01:00
presets
tests avfilter/formats: do not allow unknown layouts in ff_parse_channel_layout if nret is not set 2017-01-24 23:51:36 +01:00
tools tools/zmqsend: Do not truncate fgetc() return 2016-12-24 14:46:25 +01:00
.gitattributes Treat all '*.pnm' files as non-text file 2014-11-28 17:52:43 -05:00
.gitignore Merge commit '6641819fee' 2016-06-26 15:43:05 +02:00
.travis.yml Merge commit 'eda1832874' 2015-11-22 17:12:24 +00:00
arch.mak mips: rename mipsdspr1 to mipsdsp 2015-12-04 02:35:42 +01:00
Changelog avfilter: add abitscope multimedia filter 2017-01-26 16:21:25 +01:00
cmdutils.c cmdutils: remove duplicate windows.h include 2016-11-16 15:06:16 +01:00
cmdutils.h cmdutils: add show_demuxers and show_muxers 2016-11-08 01:56:31 +01:00
cmdutils_common_opts.h cmdutils: add show_demuxers and show_muxers 2016-11-08 01:56:31 +01:00
cmdutils_opencl.c cmdutils_opencl: fix resource_leak cid 1396852 2017-01-13 07:54:49 +08:00
common.mak Merge commit 'c5fd4b5061' 2016-06-27 19:39:46 +02:00
configure vaapi_hevc: Convert to use the new VAAPI hwaccel code 2017-01-17 23:06:46 +00:00
CONTRIBUTING.md Add CONTRIBUTING.md 2016-09-18 10:02:13 +01:00
COPYING.GPLv2
COPYING.GPLv3
COPYING.LGPLv2.1
COPYING.LGPLv3
CREDITS
ffmpeg.c ffmpeg: pass output stream duration as a hint to the muxer 2017-01-19 01:54:49 +01:00
ffmpeg.h ffmpeg_opt.c: Introduce a -vstats_version option and document the existing -vstats format. 2017-01-25 22:03:10 +01:00
ffmpeg_cuvid.c doc: fix spelling errors 2016-10-21 23:58:47 +02:00
ffmpeg_dxva2.c Merge commit '18c506e9e6' 2016-06-26 15:34:01 +02:00
ffmpeg_filter.c ffmpeg: use buffersink accessors. 2017-01-12 14:06:16 +01:00
ffmpeg_opt.c ffmpeg_opt.c: Introduce a -vstats_version option and document the existing -vstats format. 2017-01-25 22:03:10 +01:00
ffmpeg_qsv.c ffmpeg: Add an option "qsv_device" to choose proper node for QSV child device (vaapi or dxva2) 2017-01-11 20:21:09 +00:00
ffmpeg_vaapi.c ffmpeg_vaapi: Convert to use hw_frames_ctx only 2017-01-17 23:06:46 +00:00
ffmpeg_vdpau.c Merge commit 'f72db3f2f3' 2016-06-26 15:29:39 +02:00
ffmpeg_videotoolbox.c ffmpeg/videotoolbox: protect UTGetOSTypeFromString on both VDA and VT 2015-10-15 10:22:31 +02:00
ffplay.c ffplay: fix indentation after last commit 2017-01-22 16:17:50 +01:00
ffprobe.c lavc: Add spherical packet side data API 2016-12-07 14:40:06 -05:00
ffserver.c ffserver: local OOB write with custom program name 2017-01-08 03:50:56 +01:00
ffserver_config.c ffserver_config: Check for failure to allocate FFServerIPAddressACL 2016-12-22 19:23:08 +01:00
ffserver_config.h ffsrever: Make the status page bitexact if any stream is bitexact 2016-11-29 19:26:26 +01:00
INSTALL.md
library.mak Merge commit 'c5fd4b5061' 2016-06-27 19:39:46 +02:00
LICENSE.md lavfi/f_ebur128: relicense to LGPL 2016-11-27 20:46:20 +01:00
MAINTAINERS dxva2: allow an empty array of ID3D11VideoDecoderOutputView 2017-01-16 02:54:04 +01:00
Makefile Merge commit '6641819fee' 2016-06-26 15:43:05 +02:00
README.md Add CONTRIBUTING.md 2016-09-18 10:02:13 +01:00
RELEASE RELEASE: Update for past 3.2 branch 2016-10-26 20:52:43 +02:00
version.sh version.sh: Fix spurious rebuilds. 2016-03-10 09:53:10 +01:00

FFmpeg README

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

Libraries

  • libavcodec provides implementation of a wider range of codecs.
  • libavformat implements streaming protocols, container formats and basic I/O access.
  • libavutil includes hashers, decompressors and miscellaneous utility functions.
  • libavfilter provides a mean to alter decoded Audio and Video through chain of filters.
  • libavdevice provides an abstraction to access capture and playback devices.
  • libswresample implements audio mixing and resampling routines.
  • libswscale implements color conversion and scaling routines.

Tools

  • ffmpeg is a command line toolbox to manipulate, convert and stream multimedia content.
  • ffplay is a minimalistic multimedia player.
  • ffprobe is a simple analysis tool to inspect multimedia content.
  • ffserver is a multimedia streaming server for live broadcasts.
  • Additional small tools such as aviocat, ismindex and qt-faststart.

Documentation

The offline documentation is available in the doc/ directory.

The online documentation is available in the main website and in the wiki.

Examples

Coding examples are available in the doc/examples directory.

License

FFmpeg codebase is mainly LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.

Contributing

Patches should be submitted to the ffmpeg-devel mailing list using git format-patch or git send-email. Github pull requests should be avoided because they are not part of our review process and will be ignored.