เหตุผลที่ว่าทำไม TCP / IP ซ็อกเก็ตอธิบายการใช้งานไฟล์คือเมื่ออินเตอร์เฟซซ็อกเก็ตได้รับการออกแบบครั้งแรกและดำเนินการ ( ใน BSD Unix, ในปี 1983 ) นักออกแบบของความรู้สึกว่าการเชื่อมต่อเครือข่ายที่เป็นคล้ายกับไฟล์ - คุณสามารถread
, write
และclose
ทั้งสอง และมันจะเข้ากันได้ดีกับแนวคิด Unix ของ "ทุกอย่างเป็นไฟล์"
อื่น ๆ TCP / IP การใช้งานเครือข่ายสแต็คไม่จำเป็นต้องทำงานร่วมกับระบบปฏิบัติการของไฟล์ I / O ระบบย่อยตัวอย่างเป็นMacTCP แต่เนื่องจากส่วนต่อประสานซ็อกเก็ต BSD นั้นได้รับความนิยมอย่างมากแม้แต่การนำไปใช้งานอื่น ๆ เหล่านี้ก็เลือกที่จะทำซ้ำซ็อกเก็ต API ด้วยฟังก์ชั่น Unix ที่เหมือนกันดังนั้นคุณจึงได้ "file descriptors" ใช้สำหรับการสื่อสาร TCP / IP เท่านั้น มีตัวอธิบายไฟล์
ส่วนอื่น ๆ ของคำถามของคุณคือทำไมมีข้อ จำกัด ? เป็นเพราะวิธีที่เร็วที่สุดในการใช้ตารางการค้นหาไฟล์ descriptor คือการใช้อาเรย์ ในอดีตข้อ จำกัด นั้นถูกเข้ารหัสไว้อย่างหนักในเคอร์เนล
นี่คือรหัสใน Unix รีลีส 7 (1979) พร้อมตัวอธิบายไฟล์ จำกัด 20 ไฟล์ต่อกระบวนการ:
โดยการเปรียบเทียบลีนุกซ์จัดสรรพื้นที่สำหรับตารางตัวให้คำอธิบายไฟล์ของกระบวนการแบบไดนามิก ขีด จำกัด สัมบูรณ์มีค่าเริ่มต้นที่ 8192 แต่คุณสามารถตั้งค่านี้เป็นสิ่งที่คุณต้องการ /proc/sys/fs/file-max
รายการระบบของฉันใน 191072
แม้ว่าจะไม่มีขีด จำกัด แน่นอนใน Linux อีกแล้ว แต่เราไม่ต้องการให้โปรแกรมเป็นบ้าดังนั้นผู้ดูแลระบบ (หรือผู้จัดจำหน่ายแพ็กเกจ) มักจะตั้งค่าขีด จำกัด ของทรัพยากร ลองดูที่หรือเรียกใช้/etc/security/limits.conf
ulimit -n