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, ...@@ -173,10 +173,11 @@ int rtnl_dump_filter(struct rtnl_handle *rth,
status = recvmsg(rth->fd, &msg, 0); status = recvmsg(rth->fd, &msg, 0);
if (status < 0) { if (status < 0) {
if (errno == EINTR) if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue; continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
} }
if (status == 0) { if (status == 0) {
...@@ -276,10 +277,11 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, ...@@ -276,10 +277,11 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
status = recvmsg(rtnl->fd, &msg, 0); status = recvmsg(rtnl->fd, &msg, 0);
if (status < 0) { if (status < 0) {
if (errno == EINTR) if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue; continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
} }
if (status == 0) { if (status == 0) {
fprintf(stderr, "EOF on netlink\n"); fprintf(stderr, "EOF on netlink\n");
...@@ -380,10 +382,11 @@ int rtnl_listen(struct rtnl_handle *rtnl, ...@@ -380,10 +382,11 @@ int rtnl_listen(struct rtnl_handle *rtnl,
status = recvmsg(rtnl->fd, &msg, 0); status = recvmsg(rtnl->fd, &msg, 0);
if (status < 0) { if (status < 0) {
if (errno == EINTR) if (errno == EINTR || errno == EAGAIN)
continue;
perror("OVERRUN");
continue; continue;
fprintf(stderr, "netlink receive error %s (%d)\n",
strerror(errno), errno);
return -1;
} }
if (status == 0) { if (status == 0) {
fprintf(stderr, "EOF on netlink\n"); 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