Nadav Har'El
authored
The existing shutdown() code only worked with AF_INET sockets, and returned ENOTSOCK for AT_LOCAL sockets, because we implemented the latter sockets in completely different code (in af_local.cc). So in uipc_syscalls_wrap.c, the same place we call a the special af-local socketpair(), we also need to call the special af-local shutdown(). The way we do it is a bit ugly, but effective: shutdown() first calls shutdown_af_local(), and if that returns ENOTSOCK (so it's not an af_local socket), we continue trying the regular socket shutdown code. A better way would have been to add shutdown() to the fileops table - either the generic one (why not?), or invent a new mechanism whereby certain file types (in this case, "sockets" of all types) can have additional ops tables including in this case a shutdown() operation. Linux has something of this sort for implementing shutdown().
Name | Last commit | Last update |
---|---|---|
.. | ||
include/arpa | ||
machine | ||
porting | ||
scripts | ||
sys | ||
manifest.txt | ||
net.cc | ||
net.hh | ||
uipc_syscalls.h |