On 08/10/2015 01:08 PM, Maxim Perevedentsev wrote: > Such messages do not have NLMSG_ERROR or NLMSG_DONE type > but they are valid responses. We test 'multi-partness' > by looking for NLM_F_MULTI flag. > --- > src/util/virnetlink.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c > index 0052ef9..f02bb59 100644 > --- a/src/util/virnetlink.c > +++ b/src/util/virnetlink.c > @@ -386,7 +386,9 @@ virNetlinkGetErrorCode(struct nlmsghdr *resp, unsigned int recvbuflen) > break; > > default: > - goto malformed_resp; > + /* We allow multipart messages. */ > + if (!(resp->nlmsg_flags & NLM_F_MULTI)) > + goto malformed_resp; 1) It's interesting that they don't seem to define what type the message will be in these cases (it's not NLMSG_DONE or NLMSG_ERROR, and the only other standard types are NLMSG_NOOP and NLMSG_OVERRUN.) So what *is* the type in the case of a multipart message. 2) Doesn't the presence of the NLM_F_MULTI flag indicate that we need to look for another packet, rather than just returning? It's been a long time since I looked at the details of the netlink message handling, but won't this "constipate" the socket? -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list