2
TIME_WAIT ของฉันอยู่ที่ไหนใน Mac OS X
ไม่มีTIME_WAITใน Mac OS X โดยปกติเมื่อปิดการเชื่อมต่อ TCP ซ็อกเก็ตด้านข้างที่close()เรียกว่าครั้งแรกจะถูกทิ้งให้อยู่ในTIME_WAITสถานะ เมื่อเพื่อนคนหนึ่งเป็นเครื่อง Mac OS X (Lion) TIME_WAITจะไม่มีรายชื่ออยู่netstat -anบน Mac หากclose()มีการเรียกครั้งแรกทางด้าน Mac อย่างไรก็ตามดูเหมือนว่าซ็อกเก็ตอยู่ในTIME_WAITสถานะจริงเนื่องจากพยายามโทรlisten()อีกครั้ง (โดยไม่ใช้ตัวเลือกซ็อกเก็ตSO_REUSEADDR) ทำให้listen()ล้มเหลว กำลังรอ 2 * MSL (อายุการใช้งานส่วนสูงสุดซึ่งคือ 15 วินาทีบน Mac OS X Lion ตามที่รายงานโดยsysctl net.inet.tcp.msl) จะล้างTIME_WAITสถานะและlisten()สามารถเรียกได้อีกครั้งโดยไม่มีข้อผิดพลาด ทำไมฉันไม่สามารถดูซ็อกเก็ตในTIME_WAIT? การทดสอบ ต่อไปนี้เป็นโปรแกรมทดสอบอย่างง่ายสองโปรแกรมใน Python เซิร์ฟเวอร์ #!/usr/bin/env python import socket HOST = '' PORT = 50007 l …