ซ็อกเก็ต API เป็นมาตรฐานโดยพฤตินัยสำหรับการสื่อสาร TCP / IP และ UDP / IP (นั่นคือรหัสเครือข่ายที่เรารู้จัก) อย่างไรก็ตามหนึ่งในฟังก์ชั่นหลักของมันaccept()
นั้นมีมนต์ขลังเล็กน้อย
หากต้องการยืมคำจำกัดความกึ่งทางการ:
ยอมรับ () ถูกใช้ในฝั่งเซิร์ฟเวอร์ ยอมรับความพยายามที่เข้ามาเพื่อสร้างการเชื่อมต่อ TCP ใหม่จากไคลเอนต์ระยะไกลและสร้างซ็อกเก็ตใหม่ที่เชื่อมโยงกับคู่ที่อยู่ซ็อกเก็ตของการเชื่อมต่อนี้
กล่าวอีกนัยหนึ่งคือaccept
ส่งคืนซ็อกเก็ตใหม่ซึ่งเซิร์ฟเวอร์สามารถสื่อสารกับไคลเอ็นต์ที่เชื่อมต่อใหม่ได้ ซ็อกเก็ตเก่า (ซึ่งaccept
ถูกเรียกว่า) ยังคงเปิดอยู่บนพอร์ตเดียวกันเพื่อรับฟังการเชื่อมต่อใหม่
วิธีการaccept
ทำงานหรือไม่ มีการใช้งานอย่างไร? มีความสับสนมากมายในหัวข้อนี้ หลายคนอ้างว่ายอมรับเปิดพอร์ตใหม่และคุณสื่อสารกับลูกค้าผ่านพอร์ตนั้น แต่เห็นได้ชัดว่าสิ่งนี้ไม่เป็นความจริงเนื่องจากไม่มีการเปิดพอร์ตใหม่ คุณสามารถสื่อสารผ่านพอร์ตเดียวกันกับไคลเอนต์ต่าง ๆ ได้จริง แต่อย่างไร? เมื่อหลายเธรดเรียกrecv
ใช้พอร์ตเดียวกันข้อมูลจะรู้ได้อย่างไรว่าจะไปที่ใด
ฉันเดาว่ามันเป็นสิ่งที่อยู่ตามบรรทัดของที่อยู่ของลูกค้าที่เชื่อมโยงกับตัวอธิบายซ็อกเก็ตและเมื่อใดก็ตามที่ข้อมูลเข้ามาข้อมูลrecv
จะถูกส่งไปยังซ็อกเก็ตที่ถูกต้อง แต่ฉันไม่แน่ใจ
เป็นการดีที่จะได้รับคำอธิบายอย่างละเอียดเกี่ยวกับการทำงานภายในของกลไกนี้