2010-06-23 16 views
5

Tenía la impresión de que boost :: asio usaría una configuración de epoll por defecto en lugar de una implementación de selección, pero después de ejecutar algunas pruebas parece que mi configuración está utilizando select.Boost Asio en Linux sin usar Epoll

OS: RHEL 4
Kernel: 2.6
GCC: 3.4.6

me escribió un pequeño programa de prueba para verificar el cual cabecera del reactor estaba siendo utilizado, y parece que su utilizando el reactor de selección en lugar de el reactor 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 

¿Qué podría estar haciendo mal?

Respuesta

4

Su programa dice "seleccionar" también para mí, pero asio está utilizando epoll_wait(), como ps -Teo tid,wchan:25,comm informes.

¿Qué tal

#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; 
} 

(la escalera de IFDEFs agarró por /usr/include/boost/asio/serial_port_service.hpp)

+0

Este código impreso "seleccionar" para mí. Después de excavar en epoll_reactor_fwd.hpp y algunas pruebas más, el LINUX_VERSION_CODE devuelve una versión menos de 2.4.45 (que se requiere para usar epoll, aparentemente). uname -r devuelve lo siguiente: $ uname -r 2.6.9-78.0.13.ELsmp Si tonto con el núcleo requerido en epoll_reactor_fwd.hpp puedo conseguir el programa para la salida "epoll". ¿Es esto algún tipo de error de configuración del servidor? –

+0

De hecho parece ser así. Mi sistema de desarrollo muestra LINUX_VERSION_CODE como 132639 o KERNEL_VERSION (2,6,31) (y se envió con 2.6.31.5 - es un OpenSUSE). ¿Qué pasaría si reconstruyes el impulso desde la fuente? – Cubbi

+0

Boost.Asio es encabezado solamente, dudo que la recuperación de impulso ayudará. –

Cuestiones relacionadas