}
for (;;) {
- ssize_t retval = read(netdev->fd, data, size);
+ ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
if (retval >= 0) {
- return retval;
+ return retval <= size ? retval : -EMSGSIZE;
} else if (errno != EINTR) {
if (errno != EAGAIN) {
VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s",
error = netdev_vport_get_stats(netdev_, stats);
if (error) {
- VLOG_WARN_RL(&rl, "%s: obtaining netdev stats via vport failed %d",
- netdev_get_name(netdev_), error);
+ VLOG_WARN_RL(&rl, "%s: obtaining netdev stats via vport failed "
+ "(%s)", netdev_get_name(netdev_), strerror(error));
}
netdev_dev->have_vport_stats = !error;
netdev_dev->cache_valid |= VALID_HAVE_VPORT_STATS;