Ich hatte den Eindruck, dass boost :: asio standardmäßig eine epoll-Installation anstelle einer ausgewählten Implementierung verwenden würde, aber nach einigen Tests sieht es so aus, als würde meine Installation select verwenden.Boost Asio Unter Linux nicht mit Epoll
OS: RHEL 4
Kernel: 2.6
GCC: 3.4.6
ich ein kleines Testprogramm geschrieben, der Reaktor-Header, um sicherzustellen, wurde verwendet, und es sieht aus wie sein den Auswahlreaktor statt der Epollreaktor.
#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
Was könnte ich falsch machen?
Dieser Code gedruckt "select" für mich. Nach einigen Grabungen in epoll_reactor_fwd.hpp und einigen weiteren Tests gibt der LINUX_VERSION_CODE eine Version zurück, die kleiner als 2.4.45 ist (was offensichtlich nötig ist, um epoll zu verwenden). uname -r gibt folgende Formel: $ uname -r 2.6.9-78.0.13.ELsmp Wenn Narr mit der erforderlichen Kernel in epoll_reactor_fwd.hpp ich Ihr Programm zur Ausgabe von "epoll" bekommen kann. Ist das ein Fehler bei der Serverkonfiguration? –
In der Tat scheint so. Mein Dev-System gibt LINUX_VERSION_CODE als 132639 oder KERNEL_VERSION (2,6,31) aus (und es wurde mit 2.6.31.5 ausgeliefert - es ist ein OpenSUSE). Was würde passieren, wenn Sie den Boost von der Quelle wiederherstellen? – Cubbi
Boost.Asio ist nur Kopfzeile, ich bezweifle, Wiederaufbau Boost wird dazu beitragen. –