J'étais sous l'impression que boost :: asio utiliserait une installation epoll par défaut au lieu d'une implémentation sélectionnée, mais après avoir exécuté quelques tests, il semblerait que mon installation utilise select.Boost Asio sous Linux n'utilisant pas Epoll
OS: RHEL 4
Noyau: 2.6
GCC: 3.4.6
J'ai écrit un petit programme de test pour vérifier que la tête réacteur a été utilisé, et il ressemble à son utilisant le réacteur de sélection plutôt que le réacteur 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
Que pourrais-je faire de mal?
Ce code imprimé pour moi "sélectionnez". Après quelques recherches dans epoll_reactor_fwd.hpp et d'autres tests, le LINUX_VERSION_CODE retourne une version de moins de 2.4.45 (qui est nécessaire pour utiliser epoll, apparemment). uname -r renvoie les éléments suivants: uname $ -r 2.6.9-78.0.13.ELsmp Si fou avec le noyau nécessaire dans epoll_reactor_fwd.hpp je peux obtenir votre programme de sortie « epoll ». Est-ce une sorte d'erreur de configuration du serveur? –
En effet semble tellement. Mon système de développement produit LINUX_VERSION_CODE comme 132639 ou KERNEL_VERSION (2,6,31) (et il a été livré avec 2.6.31.5 - c'est un OpenSUSE). Que se passerait-il si vous reconstruisiez boost depuis la source? – Cubbi
Boost.Asio est en-tête seulement, je doute que le boost de reconstruction aidera. –