การแจ้งเตือนความพร้อมปลอมสำหรับการโทรแบบเลือกระบบ

บน http://linux.die.net/man/2/select ใต้ BUGS มีการกล่าวถึงว่าการเรียกระบบแบบเลือกบางครั้งอาจตั้งค่า FD ให้พร้อมอย่างปลอมๆ และการเรียกการอ่านครั้งต่อไปจะกลับมาเป็น 0 ข้อความอธิบายตัวอย่างหนึ่งตัวอย่าง (เช็คซัมผิด) แต่ฉันคิดว่าจะมีเหตุผลอื่นด้วย (ไม่เช่นนั้นก็จะมี แก้ไขปัญหานี้)

ความคิดใด ๆ ที่อาจเป็นสาเหตุอื่น ๆ ที่ทำให้ Select คืน FD พร้อมปลอมแปลง

และสิ่งนี้ใช้ได้กับระบบปฏิบัติการอื่นด้วย ฉันกำลังถามเกี่ยวกับ Linux

ส่วนที่เกี่ยวข้องสำหรับลิงค์ด้านบน:

ภายใต้ Linux select() อาจรายงานตัวอธิบายไฟล์ซ็อกเก็ตว่า "พร้อมสำหรับการอ่าน" ในขณะที่บล็อกการอ่านตามมา สิ่งนี้อาจเกิดขึ้นเมื่อข้อมูลมาถึงแต่หลังจากการตรวจสอบมีการตรวจสอบที่ไม่ถูกต้องและถูกละทิ้ง อาจมีสถานการณ์อื่น ๆ ที่ตัวอธิบายไฟล์ถูกรายงานว่าพร้อมแล้ว ดังนั้น การใช้ O_NONBLOCK กับซ็อกเก็ตที่ไม่ควรปิดกั้นอาจปลอดภัยกว่า


person Aditya Sehgal    schedule 13.05.2009    source แหล่งที่มา


คำตอบ (1)


นี่ไม่ใช่คำตอบอย่างแน่นอน แต่เมื่อพิจารณาจาก epoll ปัญหาเหล่านี้ดูเหมือนจะได้รับการแก้ไขแล้ว

และถ้าฉันสามารถเชื่อถือ ข้อความนี้ ใน netdev ได้ อย่างน้อยพวกเขาก็พยายามแก้ไข ในการสำรวจความคิดเห็น () และ เลือก () ด้วย (ทำลายสิ่งอื่น ๆ )

ดังนั้น ข้อบกพร่องนี้ดูเหมือนจะไม่เกี่ยวข้องในอนาคตอันใกล้นี้

person hynek    schedule 01.04.2011