คำถามติดแท็ก sigpipe

10
วิธีป้องกัน SIGPIPE (หรือจัดการอย่างถูกต้อง)
ฉันมีโปรแกรมเซิร์ฟเวอร์ขนาดเล็กที่ยอมรับการเชื่อมต่อบนซ็อกเก็ต TCP หรือ UNIX ในพื้นที่อ่านคำสั่งง่าย ๆ และส่งคำตอบกลับขึ้นอยู่กับคำสั่ง ปัญหาคือไคลเอนต์อาจไม่สนใจคำตอบในบางครั้งและออกก่อนเวลาดังนั้นการเขียนลงในซ็อกเก็ตนั้นจะทำให้เกิด SIGPIPE และทำให้เซิร์ฟเวอร์ของฉันทำงานล้มเหลว การปฏิบัติที่ดีที่สุดในการป้องกันความผิดพลาดคืออะไร มีวิธีการตรวจสอบว่าอีกด้านของบรรทัดยังอ่านอยู่หรือไม่? (select () ดูเหมือนจะไม่ทำงานที่นี่เพราะมันบอกว่าซ็อกเก็ตเขียนได้เสมอ) หรือฉันควรจับ SIGPIPE ด้วยเครื่องจัดการและเพิกเฉย?
260 c  io  signals  broken-pipe  sigpipe 

9
IOError: [Errno 32] ท่อแตก: Python
ฉันมีสคริปต์ Python 3 ที่เรียบง่ายมาก: f1 = open('a.txt', 'r') print(f1.readlines()) f2 = open('b.txt', 'r') print(f2.readlines()) f3 = open('c.txt', 'r') print(f3.readlines()) f4 = open('d.txt', 'r') print(f4.readlines()) f1.close() f2.close() f3.close() f4.close() แต่มักจะพูดว่า: IOError: [Errno 32] Broken pipe ฉันเห็นวิธีที่ซับซ้อนทั้งหมดในอินเทอร์เน็ตในการแก้ไขปัญหานี้ แต่ฉันคัดลอกโค้ดนี้โดยตรงดังนั้นฉันจึงคิดว่ามีบางอย่างผิดปกติกับโค้ดไม่ใช่ SIGPIPE ของ Python ฉันกำลังเปลี่ยนเส้นทางเอาต์พุตดังนั้นหากสคริปต์ด้านบนมีชื่อว่า "open.py" คำสั่งของฉันที่จะเรียกใช้จะเป็น: open.py | othercommand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.