Ho avuto l'impressione che boost :: asio usasse una configurazione epoll di default invece di un'implementazione selezionata, ma dopo aver eseguito alcuni test sembra che il mio setup stia usando select.Boost Asio su Linux non utilizza Epoll
OS: RHEL 4
Kernel: 2.6
GCC: 3.4.6
ho scritto un piccolo programma di test per verificare che un colpo di testa del reattore veniva usato, e sembra che la sua utilizzando il reattore di selezione piuttosto che il reattore 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
Cosa potrei fare di sbagliato?
Questo codice stampato "selezionare" per me. Dopo alcuni scavi in epoll_reactor_fwd.hpp e altri test, il LINUX_VERSION_CODE restituisce una versione inferiore a quella di 2.4.45 (che è richiesta per usare epoll, apparentemente). uname -r restituisce il seguente: $ uname -r 2.6.9-78.0.13.ELsmp Se sciocco con il kernel richiesta in epoll_reactor_fwd.hpp posso ottenere il vostro programma per l'uscita "epoll". Si tratta di una sorta di errore di configurazione del server? –
Sembra proprio così. Il mio sistema di sviluppo emette LINUX_VERSION_CODE come 132639 o KERNEL_VERSION (2,6,31) (ed è stato spedito con 2.6.31.5 - è un OpenSUSE). Cosa succederebbe se ricostruissi boost dalla sorgente? – Cubbi
Boost.Asio è solo l'intestazione, dubito che la ricostruzione aiuterà. –