]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
wip sendmsg_test
authorDaniel Salzman <daniel.salzman@nic.cz>
Mon, 20 May 2019 08:13:55 +0000 (10:13 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Mon, 20 May 2019 08:13:55 +0000 (10:13 +0200)
src/knot/server/udp-handler.c

index 7f9e6c84fb29dbf331caa46331108d89dd0a8d46..22ad0feb1730b41cf8d36d6b62b3e95e55e73664 100644 (file)
@@ -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;