PR: Zero copying in snapserver on TCP connections for audio data #1440
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.
This is the fix/enhancement for #1423
This is a zero copy implementation for TCP on linux.
I tackled the problem directly with sendmsg with MSG_ZEROCOPY and a dedicated thread for completion messages (MSG_ERRQUEUE). It's on an exclusive alternative path to the boost:asio stuff (as asio didn't support that) and it's linux only. But fallback is to the (alternative) asio implementation.
Pull Request Checklist
Contributions must be licensed under the GPL-3.0 License
This project loosely follows the Google C++ Style Guide
For better compatibility with embedded toolchains, the used C++ standard should be limited to C++17
Code should be formatted by running
make reformatBranch from the
developbranch and ensure it is up to date with the currentdevelopbranch before submitting your pull request. If it doesn't merge cleanly withdevelop, you may be asked to resolve the conflicts. Pull requests to master will be closed.Commits should be as small as possible while ensuring that each commit is correct independently (i.e., each commit should compile and pass tests).
Pull requests must not contain compiled sources (already set by the default .gitignore) or binary files
Test your changes as thoroughly as possible before you commit them. Preferably, automate your test by unit/integration tests. If tested manually, provide information about the test scope in the PR description (e.g. “Test passed: Upgrade version from 0.42 to 0.42.23.”).
Create Work In Progress [WIP] pull requests only if you need clarification or an explicit review before you can continue your work item.
If your patch is not getting reviewed or you need a specific person to review it, you can @-reply a reviewer asking for a review in the pull request or a comment, or you can ask for a review by contacting us via email.
Post review: