if (likely(!err)) {
log_debug("Sent %u bytes on wire\n", len);
ret += len;
- } else
+ dest->bytes = len;
+ } else {
log_error("ip_queue_xmit failed\n");
+ dest->bytes = -1;
+ }
}
return ret;
int err, copied;
int i;
struct sockaddr_mptp *ret_addr = (struct sockaddr_mptp *) msg->msg_name;
+ ret_addr->count = 0;
log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk, flags);
log_error("skb_copy_datagram_iovec\n");
goto out_free;
}
+ log_debug("Received %d bytes\n", copied);
sock_recv_ts_and_drops(msg, sk, skb);
- if (ret_addr)
+ if (ret_addr) {
memcpy(&ret_addr->dests[i], &mptp_addr->dests[0], sizeof(ret_addr->dests[i]));
+ ret_addr->dests[i].bytes = copied;
+ }
err = copied;
out_free:
skb_free_datagram(sk, skb);
+ if (i == msg->msg_iovlen - 1)
+ break;
+
skb = skb_recv_datagram(sk, flags, 1, &err);
if (likely(err == -EAGAIN)) {
log_debug("No more skbs in the queue, returning...\n");