У меня создалось впечатление, которые повышают:: asio использовал бы установку epoll по умолчанию вместо избранной реализации, но после запущения некоторых тестов похоже, что моя установка использует выбор.
ОС: RHEL 4
Kernel:2.6
GCC:3.4.6
Я записал немного тестовой программы для проверки, какой реакторный заголовок использовался, и это похоже на свое использование избранного реактора, а не epoll реактора.
#include <boost/asio.hpp>
#include <string>
#include <iostream>
std::string output;
#if defined(BOOST_ASIO_EPOLL_REACTOR_HPP)
int main(void)
{
std::cout << "you have epoll enabled." << std::endl;
}
#elif defined(BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP)
int main(void)
{
std::cout << "you have select enabled." << std::endl;
}
#else
int main(void)
{
std::cout << "this shit is confusing." << std::endl;
}
#endif
Что я мог делать неправильно?
Ваша программа тоже говорит "выберите" для меня, но asio использует epoll_wait (), как сообщает ps -Teo tid, wchan: 25, comm
.
Как насчет
#include <iostream>
#include <string>
#include <boost/asio.hpp>
int main()
{
std::string output;
#if defined(BOOST_ASIO_HAS_IOCP)
output = "iocp" ;
#elif defined(BOOST_ASIO_HAS_EPOLL)
output = "epoll" ;
#elif defined(BOOST_ASIO_HAS_KQUEUE)
output = "kqueue" ;
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
output = "/dev/poll" ;
#else
output = "select" ;
#endif
std::cout << output << std::endl;
}
(лестница ifdefs взята из /usr/include/boost/asio/serial_port_service.hpp
)