summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib/strtoul.3
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>1999-11-18 03:01:06 +0000
committerjdp <jdp@FreeBSD.org>1999-11-18 03:01:06 +0000
commit1cd372d24f6ec30dbb7398b7b6fc79ceccb59b71 (patch)
tree1ea3f99b25d3246b7e2c966bb5e32cec83f0760a /lib/libc/stdlib/strtoul.3
parent26433095088568aa67001274ae59df87613c88f8 (diff)
downloadFreeBSD-src-1cd372d24f6ec30dbb7398b7b6fc79ceccb59b71.zip
FreeBSD-src-1cd372d24f6ec30dbb7398b7b6fc79ceccb59b71.tar.gz
For the TCP transport, put the listening socket in non-blocking
mode. This addresses a well-known race condition that can cause servers to hang in accept(). The relevant case is when somebody connects to the server and then immediately kills the connection by sending a TCP reset. On the server this causes select to report a ready condition on the socket, after which the accept call blocks because there is no longer any pending connection to accept. In -current there is already a work-around for this in the kernel. It was merged into -stable some time ago, but then David Greenman reverted it because it seemed to be causing a socket leak in some cases. (See uipc_socket.c revision 1.51.2.3.) Hence this userland fix is needed in -stable, and I plan to merge it into that branch soon because it fixes a potential DoS attack. It may also be needed in -current if the suspected socket leak turns out to be real. In any case, after thinking it over I believe the fix belongs in userland. An application shouldn't assume that a ready return from select guarantees that the subsequent I/O operation cannot block. A lot can happen between the select and the accept. A similar fix should most likely be applied to the Unix domain socket transport too. Submitted by: peter Reviewed by: jdp
Diffstat (limited to 'lib/libc/stdlib/strtoul.3')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud