WIP: conn_linux: add recvmmsg#30
Draft
nickgarlis wants to merge 1 commit into
Draft
Conversation
Add a Recvmmsg wrapper exposing recvmmsg(2) for high-rate event-stream
consumers. Integrates with the runtime poller via the existing read
helper.
This is mostly an experiment at this point. The goal is to reduce
syscalls when using netlink nfqueue.
Limitations:
- linux/amd64 only. The local mmsghdr struct assumes 64-bit layout
(trailing padding after Msglen).
- No per-message sender address. Unlike unix.Recvmsg, this does not
return a Sockaddr.
- No scatter-gather per message. Each message uses exactly one iovec;
callers cannot split a single message across multiple buffers.
- Allocates five slices per call (iovs, msgs, and the three result
slices). A future RecvmmsgInto variant taking caller-allocated
storage would eliminate this for steady-state high-rate consumers.
- MSG_WAITFORONE is accepted but has no effect given the
nonblocking-fd + poller pattern.
Collaborator
|
Still WIP? |
Collaborator
Author
Yes, I've opened an upstream PR to support multi-arch since it's tricky to manually re-create all of those structs here. |
SuperQ
marked this pull request as draft
May 26, 2026 09:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add a Recvmmsg wrapper exposing recvmmsg(2) for high-rate event-stream consumers. Integrates with the runtime poller via the existing read helper.
This is mostly an experiment at this point. The goal is to reduce syscalls when using netlink nfqueue.
Limitations:
linux/amd64 only. The local mmsghdr struct assumes 64-bit layout (trailing padding after Msglen).
No per-message sender address. Unlike unix.Recvmsg, this does not return a Sockaddr.
No scatter-gather per message. Each message uses exactly one iovec; callers cannot split a single message across multiple buffers.
Allocates five slices per call (iovs, msgs, and the three result slices). A future RecvmmsgInto variant taking caller-allocated storage would eliminate this for steady-state high-rate consumers.
MSG_WAITFORONE is accepted but has no effect given the nonblocking-fd + poller pattern.