From d5802e0d447c42aa9debefae0d45adc03e28c3d4 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 7 Jul 2023 18:47:31 -0400 Subject: [PATCH] A few fixes, it works! --- osdep/Phy.hpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp index edad959f1..5070d68fa 100644 --- a/osdep/Phy.hpp +++ b/osdep/Phy.hpp @@ -1032,19 +1032,22 @@ template class Phy { memset(addrs, 0, sizeof(addrs)); mmsghdr mm[RECVMMSG_WINDOW_SIZE]; memset(mm, 0, sizeof(mm)); + for (int i = 0; i < RECVMMSG_WINDOW_SIZE; ++i) { + iovs[i].iov_base = (void*)bufs[i]; + iovs[i].iov_len = RECVMMSG_BUF_SIZE; + mm[i].msg_hdr.msg_name = (void*)&(addrs[i]); + mm[i].msg_hdr.msg_iov = &(iovs[i]); + mm[i].msg_hdr.msg_iovlen = 1; + } for (int k = 0; k < 1024; ++k) { for (int i = 0; i < RECVMMSG_WINDOW_SIZE; ++i) { - iovs[i].iov_base = (void*)bufs[i]; - iovs[i].iov_len = RECVMMSG_BUF_SIZE; - mm[i].msg_hdr.msg_name = (void*)&(addrs[i]); mm[i].msg_hdr.msg_namelen = sizeof(sockaddr_storage); - mm[i].msg_hdr.msg_iov = &(iovs[i]); - mm[i].msg_hdr.msg_iovlen = 1; + mm[i].msg_len = 0; } int received_count = recvmmsg(s->sock, mm, RECVMMSG_WINDOW_SIZE, MSG_WAITFORONE, nullptr); if (received_count > 0) { for (int i = 0; i < received_count; ++i) { - long n = (long)mm[i].msg_hdr.msg_iov->iov_len; + long n = (long)mm[i].msg_len; if (n > 0) { try { _handler->phyOnDatagram((PhySocket*)&(*s), &(s->uptr), (const struct sockaddr*)&(s->saddr), (const struct sockaddr*)&(addrs[i]), bufs[i], (unsigned long)n);