Implement QNX reactor based on QNX pulse communication #1617
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.
The current ASIO socket implementation on QNX uses two different processes for communication. The io_pkt (or in newer version io_sock) and the pipe daemon. Involving additional daemons in basic communication paths is always less than optional with respect to latency and CPU load.
While io_pkt implements the real socket functionality, the pipe daemon is only used to implement the file descriptor select functionality. ASIOs default select_reactor implementation on QNX uses the pipe_select_interrupter, which performs the interactions with the pipe daemon. The proposed patch (initially implemented by Blackberry) implements its own ionotify_reactor, which builds on top of the ionotify() system call and asynchronous QNX pulse communication. As a result, the interaction with the additional pipe daemon is not needed anymore.