boost::asio扩展TCP套接字
boost::asio extension TCP socket
我正在尝试制作一个类似于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
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- C++ TCP 套接字 | 无法将"std::__cxx11::字符串"转换为"const
- ASIO 的 TCP 套接字::async_wait() 并在此之后关闭套接字
- Visual Studio(C++):如何使用TCP套接字发送多个值
- TCP套接字(客户端-服务器)recv()返回-1值
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- C++中TCP套接字的recv函数
- 通过 TCP 套接字发送大型 base64 字符串
- 提升 ASIO TCP 套接字 1.70 不向后兼容
- 尝试连接到 TCP 套接字 (Linux) 时连接被拒绝
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- 如何知道请求是否完全使用 TCP 套接字接收?
- Qt TCP 套接字 - 写入超过 15 个字节
- 要打开以供C++中的应用程序最佳使用的并行套接字/TCP连接数
- C++ 如何通过套接字 (TCP) 进行二进制序列化
- 套接字 TCP 服务器程序问题
- Cpp套接字-TCP传输(使用同一端口发送,然后接收)