|
|
|
@ -222,7 +222,10 @@ const char *nfapi_recv_iter(nfapi_socket *s, const nfapi_callbacks *c, void *use |
|
|
|
} ss; |
|
|
|
socklen_t ssl = sizeof(ss); |
|
|
|
errno = 0; |
|
|
|
ssize_t r = recvfrom(s->fd, buf, sizeof(buf), 0, (struct sockaddr *) &ss.sst, &ssl); |
|
|
|
ssize_t r = recvfrom(s->fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr *) &ss.sst, &ssl); |
|
|
|
|
|
|
|
if (r < 0 && errno == EAGAIN) |
|
|
|
return NULL; |
|
|
|
|
|
|
|
if (r < 0 || r > sizeof(buf) |
|
|
|
|| ssl < sizeof(ss.ssn) |
|
|
|
@ -282,11 +285,8 @@ const char *nfapi_recv_iter(nfapi_socket *s, const nfapi_callbacks *c, void *use |
|
|
|
}; |
|
|
|
} |
|
|
|
else { |
|
|
|
if (type == NLMSG_DONE) { |
|
|
|
if (hdr->nlmsg_seq != s->last_seq) |
|
|
|
continue; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
if (type == NLMSG_DONE) |
|
|
|
continue; |
|
|
|
|
|
|
|
if (type == NLMSG_ERROR) { |
|
|
|
struct nlmsgerr *err; |
|
|
|
@ -296,11 +296,8 @@ const char *nfapi_recv_iter(nfapi_socket *s, const nfapi_callbacks *c, void *use |
|
|
|
|
|
|
|
err = (struct nlmsgerr *) (buf + next); |
|
|
|
|
|
|
|
if (err->error == 0) { |
|
|
|
if (hdr->nlmsg_seq != s->last_seq) |
|
|
|
continue; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
if (err->error == 0) |
|
|
|
continue; |
|
|
|
|
|
|
|
errno = -err->error; |
|
|
|
s->err_seq = hdr->nlmsg_seq; |
|
|
|
|