我試圖做一個asio擴展,類似於boost套接字,在windows和linux上都有實現。這些擴展將用於與使用EIBD的KNX網絡進行交互,用於Linux。問題是,如何監視多個文件描述符。如果使用select()如何繞過FD_SETSIZE限制?boost :: asio擴展TCP套接字
boost如何在socket實現中處理這個問題?據我所知,在Windows上使用IO完成端口。
我試圖做一個asio擴展,類似於boost套接字,在windows和linux上都有實現。這些擴展將用於與使用EIBD的KNX網絡進行交互,用於Linux。問題是,如何監視多個文件描述符。如果使用select()如何繞過FD_SETSIZE限制?boost :: asio擴展TCP套接字
boost如何在socket實現中處理這個問題?據我所知,在Windows上使用IO完成端口。
我的問題的簡短答案是使用epoll。根據wikipedia,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.Asio根據反應器(如select(kernel 2.4),epoll(kernel 2.6)或kqueue(Mac OS))實施Proactor設計模式。
在Windows NT,2000和XP上,Boost.Asio利用重疊的I/O來提供Proactor設計模式的高效實現。
更多提升:
www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/overview/core/async.html
www.boost.org/doc/libs /1_35_0/doc/html/boost_asio/design/implementation.html
看看[epoll](http://linux.die.net/man/7/epoll)。 –
這需要沉重的理解asio內部,我認爲沒有現成的解決方案 – PSIAlt
也許我錯過了一些東西,是不是這個[null_buffers](http://stackoverflow.com/a/4686523/283302)的目的? –