Boost logo

Boost Users :

From: Gavin Lambert (boost_at_[hidden])
Date: 2020-04-01 22:48:44

On 2/04/2020 07:27, Richard Hodges wrote:
> On Wed, 1 Apr 2020 at 16:11, Stanislav Zaikin wrote:
> Hello!
> I have a custom network stack (it processed packets in userspace)
> which exposed some functions in C. It has its own listen, bind,
> accept functions and many other, and furthermore even custom epoll,
> select and poll.
> I want to expand asio in some away, just to support my application
> with this custom network stack. But I'm a bit confused how I can do it.
> Boost.Beast implements some custom stream types. That is, objects that
> model AsyncReadStream and AsyncWriteStream.
> This would be a good place to start looking for examples.
> There is also a primer on writing asio operations in the beast
> documentation.

That might suffice for custom listen/bind/accept/read/write.

But custom epoll/select/poll is an entirely different kettle of fish.
If your custom library must use those (and cannot provide a standard
platform file descriptor that works with the standard platform
epoll/select/poll), then you're largely out of luck. For that, you
would have to write a custom reactor instead; and as far as I am aware
without deep modifications to Asio there is no provision for doing so
(and it's a massive amount of work that is hard to get correct, although
you can use the existing implementations as a guide).

(There's also the question of whether you want to completely replace
Asio's standard reactor or if you want to have something like a gateway
thread that marshals work between your custom reactor and the standard
reactor. Each has different tradeoffs.)

Jeff is probably correct that if you have questions about this you
should ask directly on the Asio lists. The primary author doesn't read
this list.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at