diff options
| author | Roy Marples <roy@marples.name> | 2020-01-26 15:46:41 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2020-01-26 15:46:41 +0000 |
| commit | 63f3177991de2716b6d5364e2906c39d140b54fa (patch) | |
| tree | 2bdea1244fabe8c9eba297664bec6e6534dd8c85 /src/dhcpcd.c | |
| parent | 3bca2be9a4dba4deea45131c687a390f23332f2a (diff) | |
| download | dhcpcd-63f3177991de2716b6d5364e2906c39d140b54fa.tar.xz | |
dhcpcd: When route socket overflows, report how large it is.
Of course Linux likes to double it, so cater for this.
Diffstat (limited to 'src/dhcpcd.c')
| -rw-r--r-- | src/dhcpcd.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/dhcpcd.c b/src/dhcpcd.c index 20ade526..b6c531d6 100644 --- a/src/dhcpcd.c +++ b/src/dhcpcd.c @@ -1116,11 +1116,23 @@ dhcpcd_setlinkrcvbuf(struct dhcpcd_ctx *ctx) void dhcpcd_linkoverflow(struct dhcpcd_ctx *ctx) { + socklen_t socklen; + int rcvbuflen; struct if_head *ifaces; struct ifaddrs *ifaddrs; struct interface *ifp, *ifn, *ifp1; - logerrx("route socket overflowed - learning interface state"); + socklen = sizeof(rcvbuflen); + if (getsockopt(ctx->link_fd, SOL_SOCKET, + SO_RCVBUF, &rcvbuflen, &socklen) == -1) + rcvbuflen = 0; +#ifdef __linux__ + else + rcvbuflen /= 2; +#endif + + logerrx("route socket overflowed (rcvbuflen %d)" + " - learning interface state", rcvbuflen); /* Close the existing socket and open a new one. * This is easier than draining the kernel buffer of an |
