boost::asio扩展TCP套接字

boost::asio extension TCP socket

本文关键字:套接字 TCP asio boost 扩展      更新时间:2023-10-16

我正在尝试制作一个类似于boost套接字的asio扩展,在windows和linux上都有实现。这些扩展将用于使用linux的EIBD与KNX网络进行交互。问题是,如何监视多个文件描述符。如果使用select(),如何绕过FD_SETSIZE限制?

boost如何在套接字实现中处理此问题?据我所知,在windows上使用的是IO完成端口。

我的问题的简短答案是使用epoll。根据维基百科的说法,epoll是一种可扩展的Linux I/O事件通知机制,首次在Linux内核2.5.44中引入。

select(2)一次最多可以监视FD_SETSIZE数量的描述符,通常是在libc编译时确定的一小部分。相反,epoll没有这样的固定限制,也不执行任何线性扫描。因此,它能够更好地执行并处理更多的事件。

有关如何使用epoll的教程,请访问banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/

至于Boost,在许多平台上,Boost.Asio在Reactor方面实现了Proactor设计模式,例如select(内核2.4)、epoll(内核2.6)或kqueue(Mac OS)。

在WindowsNT、2000和XP上,Boost.Asio利用重叠I/O提供了Proactor设计模式的有效实现。

更多关于Boost:

www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/overview/core/async.html

www.boost.org/doc/libs/1_35/doc/html/boost_asio/design/enimplementation.html