การปฏิบัติที่ดีที่สุดในการป้องกันความผิดพลาดคืออะไร
ปิดใช้งาน sigpipes ตามทุกคนหรือตรวจจับและละเว้นข้อผิดพลาด
มีวิธีการตรวจสอบว่าอีกด้านของบรรทัดยังอ่านอยู่หรือไม่?
ใช่ใช้ select ()
select () ดูเหมือนจะไม่ทำงานที่นี่เพราะจะแจ้งว่าซ็อกเก็ตเขียนได้เสมอ
คุณต้องเลือกบิตอ่าน คุณอาจเพิกเฉยต่อบิตการเขียนได้
เมื่อปลายสุดปิดการจัดการไฟล์ให้เลือกจะบอกคุณว่ามีข้อมูลพร้อมที่จะอ่าน เมื่อคุณไปอ่านแล้วคุณจะได้รับกลับ 0 ไบต์ซึ่งเป็นวิธีที่ระบบปฏิบัติการบอกคุณว่าหมายเลขอ้างอิงไฟล์ถูกปิด
ครั้งเดียวที่คุณไม่สามารถเพิกเฉยบิตการเขียนได้คือถ้าคุณกำลังส่งวอลุ่มขนาดใหญ่และมีความเสี่ยงที่ปลายอีกด้านหนึ่งจะถูกแบ็คล็อกซึ่งอาจทำให้บัฟเฟอร์ของคุณเต็ม หากเป็นเช่นนั้นการพยายามเขียนลงในตัวจัดการไฟล์อาจทำให้โปรแกรม / เธรดของคุณถูกบล็อกหรือล้มเหลว การเลือกการทดสอบก่อนการเขียนจะช่วยปกป้องคุณจากสิ่งนั้น แต่มันไม่รับประกันว่าปลายอีกด้านจะแข็งแรงหรือข้อมูลของคุณกำลังจะมาถึง
โปรดทราบว่าคุณสามารถรับ sigpipe ได้จากระยะใกล้ () เช่นเดียวกับเมื่อคุณเขียน
ปิดล้างข้อมูลบัฟเฟอร์ใด ๆ หากปลายอีกด้านถูกปิดไปแล้วการปิดจะล้มเหลวและคุณจะได้รับ sigpipe
หากคุณใช้ TCPIP ที่บัฟเฟอร์การเขียนที่สำเร็จหมายความว่าข้อมูลของคุณได้รับการจัดคิวเพื่อส่งแล้วนั่นไม่ได้หมายความว่ามันถูกส่งไปแล้ว จนกว่าคุณจะปิดการโทรสำเร็จคุณจะไม่ทราบว่าข้อมูลของคุณถูกส่งไปแล้ว
Sigpipe บอกคุณว่ามีบางอย่างผิดปกติมันไม่ได้บอกอะไรคุณหรือสิ่งที่คุณควรทำ