On Thu, Aug 03, 2023 at 12:47:59AM +0200, Stefano Brivio wrote: > On Mon, 24 Jul 2023 16:09:27 +1000 > David Gibson wrote: > > > Errors on send() or recv() calls on a netlink socket don't indicate errors > > with the netlink operations we're attempting, but rather that something's > > gone wrong with the mechanics of netlink itself. We don't really expect > > this to ever happen, and if it does, it's not clear what we could to to > > recover. > > > > So, treat errors from these calls as fatal, rather than returning the error > > up the stack. This makes handling failures in the callers of nl_req() > > simpler. > > > > Signed-off-by: David Gibson > > --- > > netlink.c | 36 +++++++++++++++++------------------- > > 1 file changed, 17 insertions(+), 19 deletions(-) > > > > diff --git a/netlink.c b/netlink.c > > index 3620fd6..826c926 100644 > > --- a/netlink.c > > +++ b/netlink.c > > @@ -103,9 +103,9 @@ fail: > > * @req: Request with netlink header > > * @len: Request length > > * > > - * Return: received length on success, negative error code on failure > > + * Return: received length on success, terminates on error > > */ > > -static int nl_req(int s, char *buf, const void *req, ssize_t len) > > +static ssize_t nl_req(int s, char *buf, const void *req, ssize_t len) > > { > > char flush[NLBUFSIZ]; > > int done = 0; > > @@ -124,11 +124,17 @@ static int nl_req(int s, char *buf, const void *req, ssize_t len) > > } > > } > > > > - if ((send(s, req, len, 0) < len) || > > - (len = recv(s, buf, NLBUFSIZ, 0)) < 0) > > - return -errno; > > + n = send(s, req, len, 0); > > + if (n < 0) > > + die("netlink: Failed to send(): %s", strerror(errno)); > > + else if (n < len) > > + die("netlink: Short send"); > > If you respin, probably worth doing: > > die("netlink: Short send (%li out of %li bytes)", n, len); Done. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson