2010-06-23 11 views
5

का उपयोग नहीं कर रहा है, मैं इस धारणा के तहत था कि बूस्ट :: एएसओ एक चुनिंदा कार्यान्वयन के बजाय डिफ़ॉल्ट रूप से एक एपोल सेटअप का उपयोग करेगा, लेकिन कुछ परीक्षण चलाने के बाद ऐसा लगता है कि मेरा सेटअप चयन का उपयोग कर रहा है।लिनक्स पर एसोयो को एपोल

ओएस: RHEL 4
कर्नेल: 2.6
जीसीसी: 3.4.6

मैं एक छोटे से परीक्षण कार्यक्रम जो रिएक्टर हैडर किया जा रहा था सत्यापित करने के लिए लिखा था, और उसके चयन रिएक्टर का उपयोग कर के बजाय की तरह यह लग रहा है एपोल रिएक्टर।

#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 

मैं गलत क्या कर सकता था?

उत्तर

4

आपका प्रोग्राम मेरे लिए "चयन करें" कहता है, फिर भी एएसओ 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 से पकड़ा)

+0

मुद्रित मेरे लिए "का चयन करें" यह कोड। epoll_reactor_fwd.hpp में कुछ खुदाई करने के बाद और कुछ और परीक्षण, LINUX_VERSION_CODE एक संस्करण को कम कर रहा है जो 2.4.45 (जो स्पष्ट रूप से एपोल का उपयोग करने के लिए आवश्यक है)। uname -r निम्नलिखित रिटर्न: $ uname -r 2.6.9-78.0.13.ELsmp तो epoll_reactor_fwd.hpp मैं उत्पादन "epoll" करने के लिए अपने कार्यक्रम प्राप्त कर सकते हैं में आवश्यक कर्नेल के साथ मूर्ख। क्या यह सर्वर कॉन्फ़िगरेशन त्रुटि का कुछ प्रकार है? –

+0

वास्तव में ऐसा लगता है। मेरी देव प्रणाली LINUX_VERSION_CODE को 132639 या KERNEL_VERSION (2,6,31) के रूप में आउटपुट करती है (और इसे 2.6.31.5 के साथ भेज दिया गया था - यह एक ओपनएसयूएसई है)। यदि आप स्रोत से बढ़ावा को पुनर्निर्माण करते हैं तो क्या होगा? – Cubbi

+0

Boost.Asio केवल हेडर है, मुझे संदेह है कि पुनर्निर्माण बढ़ावा मदद करेगा। –

संबंधित मुद्दे