}
for (;;) {
- ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
+ ssize_t retval;
+
+ retval = (netdev_->netdev_dev->netdev_class == &netdev_tap_class
+ ? read(netdev->fd, data, size)
+ : recv(netdev->fd, data, size, MSG_TRUNC));
if (retval >= 0) {
return retval <= size ? retval : -EMSGSIZE;
} else if (errno != EINTR) {