socket: introduce SO_RERROR to detect receive buffer overflow
authorRoy Marples <roy@marples.name>
Wed, 7 Aug 2019 00:48:21 +0000 (01:48 +0100)
committerRoy Marples <roy@marples.name>
Wed, 7 Aug 2019 00:48:21 +0000 (01:48 +0100)
commit7eaeff3d5b7170299f570487da1da8a4e87ab072
treeec592c2fb6054081425ee4f23d7950475f798041
parent3f628449363f40a7487918e1bdb8b7ec6e8e2b3d
socket: introduce SO_RERROR to detect receive buffer overflow

kernel receive buffers are initially of a limited size and
generally the network protocols that use them don't care
if a packet gets lost.

However some users do care about lost messages even if not
baked into the protocol - such as consumers of route(4) to
track state.

POSIX states that read(2) can return an error of ENOBUFS so
return this error code when an overflow is detected.
Guard this with socket option SO_RERROR so that existing
applications which do not care can carry on not caring by
default.

Taken-from: NetBSD
Reviewed-by: sephe
15 files changed:
lib/libc/sys/getsockopt.2
sys/kern/uipc_socket.c
sys/kern/uipc_socket2.c
sys/net/ip_mroute/ip_mroute.c
sys/net/raw_usrreq.c
sys/netgraph/socket/ng_socket.c
sys/netinet/ip_divert.c
sys/netinet/raw_ip.c
sys/netinet/udp_usrreq.c
sys/netinet6/icmp6.c
sys/netinet6/ip6_mroute.c
sys/netinet6/raw_ip6.c
sys/netinet6/udp6_usrreq.c
sys/sys/socket.h
sys/sys/socketvar.h