From bb20e95c8e6f1f0b731dc40377ea8a5dea24d7a6 Mon Sep 17 00:00:00 2001 From: Daniel Salzman Date: Mon, 20 May 2019 10:13:55 +0200 Subject: [PATCH] wip --- src/knot/server/udp-handler.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/knot/server/udp-handler.c b/src/knot/server/udp-handler.c index 7f9e6c84fb..22ad0feb17 100644 --- a/src/knot/server/udp-handler.c +++ b/src/knot/server/udp-handler.c @@ -319,10 +319,23 @@ static int udp_recvmmsg_handle(udp_context_t *ctx, void *d) return KNOT_EOK; } +static int send_mmsg(int sock, struct sockaddr *addrs, struct mmsghdr *msgs, size_t count) +{ + int sent = 0; + for (unsigned i = 0; i < count; ++i) { + if (sendmsg(sock, &msgs[i].msg_hdr, 0) > 0) { + ++sent; + } + } + + return sent; +} + static int udp_recvmmsg_send(void *d) { struct udp_recvmmsg *rq = (struct udp_recvmmsg *)d; - int rc = sendmmsg(rq->fd, rq->msgs[TX], rq->rcvd, 0); + //int rc = sendmmsg(rq->fd, rq->msgs[TX], rq->rcvd, 0); + int rc = send_mmsg(rq->fd, (struct sockaddr *)rq->addrs, rq->msgs[TX], rq->rcvd); for (unsigned i = 0; i < rq->rcvd; ++i) { /* Reset buffer size and address len. */ struct iovec *rx = rq->msgs[RX][i].msg_hdr.msg_iov; -- 2.47.3