Commit aa8032e6 authored by Stephen Hemminger's avatar Stephen Hemminger

libnetlink: don't spin forever on receive error

If there is a problem talking to kernel, don't retry except in the
special case of signal or -EAGAIN
Signed-off-by: default avatarStephen Hemminger <stephen.hemminger@vyatta.com>
parent 8055063a
......@@ -173,10 +173,11 @@ int rtnl_dump_filter(struct rtnl_handle *rth,
status = recvmsg(rth->fd, &msg, 0);
if (status < 0) {
if (errno == EINTR)
if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
}
if (status == 0) {
......@@ -276,10 +277,11 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
status = recvmsg(rtnl->fd, &msg, 0);
if (status < 0) {
if (errno == EINTR)
if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
}
if (status == 0) {
fprintf(stderr, "EOF on netlink\n");
......@@ -380,10 +382,11 @@ int rtnl_listen(struct rtnl_handle *rtnl,
status = recvmsg(rtnl->fd, &msg, 0);
if (status < 0) {
if (errno == EINTR)
if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
}
if (status == 0) {
fprintf(stderr, "EOF on netlink\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment