• Luca Boccassi's avatar
    Problem: peer can close connection before SO_NOSIGPIPE is set · 31a3a068
    Luca Boccassi authored
    Solution: setsockopt returns EINVAL if the connection was closed by
    the peer after the accept returned a valid socket. This is a valid
    network error and should not cause an assert.
    To handle this we have to extract the setsockopt from the stream
    engine, as there's no clean way to return an error from the
    constructor. Instead, try to set this option before creating the
    engine in the callers, and return immediately as if the accept
    had failed to avoid churn. Do the same for the connect calls by
    setting the option in open_socket, so that the option for that
    case is set even before connecting, so there's no possible race
    condition.
    Since this has to be done in 4 places (tcp/ipc listener, socks
    connecter and open_socket) add an utility function in ip.cpp.
    Fixes #1442
    31a3a068
Name
Last commit
Last update
.github Loading commit data...
RELICENSE Loading commit data...
builds Loading commit data...
doc Loading commit data...
include Loading commit data...
m4 Loading commit data...
packaging Loading commit data...
perf Loading commit data...
src Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.hgeol Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
AUTHORS Loading commit data...
CMakeLists.txt Loading commit data...
COPYING Loading commit data...
COPYING.LESSER Loading commit data...
Dockerfile Loading commit data...
Doxygen.cfg Loading commit data...
FindSodium.cmake Loading commit data...
INSTALL Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
README.cygwin.md Loading commit data...
README.doxygen.md Loading commit data...
README.md Loading commit data...
acinclude.m4 Loading commit data...
appveyor.yml Loading commit data...
autogen.sh Loading commit data...
branding.bmp Loading commit data...
ci_build.sh Loading commit data...
ci_deploy.sh Loading commit data...
configure.ac Loading commit data...
installer.ico Loading commit data...
version.sh Loading commit data...