HomeFreeBSD

socket: Make shutdown() wake up a blocked accept().

Description

socket: Make shutdown() wake up a blocked accept().

A blocking accept (and some other operations) waits on &so->so_timeo. Once
it wakes up, it will detect the SBS_CANTRCVMORE bit.

The error from accept() is [ECONNABORTED] which is not the nicest one -- the
thread calling accept() needs to know out-of-band what is happening.

A spurious wakeup on so->so_timeo appears harmless (sleep retried) except
when lingering on close (SO_LINGER, and in that case there is no descriptor
to call shutdown() on) so this should be fairly safe.

A shutdown() already woke up a blocked accept() for TCP sockets, but not for
Unix domain sockets. This fix is generic for all domains.

This patch was sent to -hackers@ and -net@ on April 5.

MFC after: 2 weeks

Details

Provenance
jillesAuthored on Apr 30 2013, 3:06 PM
Parents
rG1c12d03f5e3c: Complete r250097:
Branches
Unknown
Tags
Unknown

Event Timeline