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: Stephen Hemminger <stephen.hemminger@vyatta.com>
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index d13596f..7876c19 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -173,10 +173,11 @@
 		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 @@
 		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 @@
 		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");