2012-11-09 14 views
5

लिनक्स में एक (गैर-स्ट्रीम) सॉकेट से पढ़ने पर, मुझे ioctl(sock, SIOCGSTAMP, &tv) के माध्यम से अंतिम प्राप्त संदेश का (हार्डवेयर-जेनरेटेड) टाइमस्टैम्प मिल सकता है। बहरहाल, यह दोनों समस्याओं बन गया है:सॉकेट रीडिंग और टाइमस्टैम्प

  • यह एक और syscall है (मैं प्रति सेकंड 24000 के बारे में संदेश प्राप्त हो रहा है, इसलिए प्रत्येक syscall दर्ज करना पड़ा हुआ है) एक पर
  • यदि यह दृष्टिकोण का उपयोग कर, मैं केवल read() एक संदेश टाइमस्टैम्प प्राप्त करने के लिए ioctl() के बाद। (मैं एक read() -call में एक से अधिक संदेश को पढ़ने तो रहा हूँ, निम्नलिखित ioctl केवल अंतिम संदेश की टाइमस्टैम्प अर्जित करता है।)

मेरा प्रश्न के रूप में कुछ syscalls में संदेशों और उनके टाइम स्टांप प्राप्त प्राप्त करने के लिए कैसे है यथासंभव। यह सही होगा अगर अर्थशास्त्र के साथ एक सिस्कल था जैसे "लंबित संदेशों को लंबित और उनके टाइमस्टैम्प पढ़ें"।

+1

क्या आपको अपनी सिस्कल समस्या का समाधान मिला? –

+1

नीचे स्वीकृत समाधान एक समाधान है; ऐसा होता है मैं अपने पुराने कर्नेल संस्करण के कारण इसका उपयोग नहीं कर सका। – pmf

उत्तर

6

recvmmsg(2) सिस्टम कॉल का उपयोग करें, यदि आपके कर्नेल के साथ उपलब्ध है, और SO_TIMESTAMP विकल्प सेट करें।

+1

आह, मैंने कभी भी recvmsg का सामना किया, recvmmsg नहीं। धन्यवाद! – pmf

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