X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=blobdiff_plain;f=src%2Fkernel%2Fmptp.c;h=83f7b1e8cd3f21723e1d4b56d1f9f5ded28d8f7d;hb=6b6c4eebfde1a4ef135d9f4ebbb735715b1e0ee9;hp=a2ec2bc9f05b9a1c800aaef9ac7540d26f49cb1d;hpb=aa5924187c04d664d19f3707a6e962cfecb1271b;p=swifty.git diff --git a/src/kernel/mptp.c b/src/kernel/mptp.c index a2ec2bc..83f7b1e 100644 --- a/src/kernel/mptp.c +++ b/src/kernel/mptp.c @@ -362,6 +362,7 @@ static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr * 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); @@ -387,17 +388,23 @@ static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr * 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");