1. 程式人生 > >關於套接字描述符

關於套接字描述符

關系 具體細節 socket 什麽 想象 分享 地址 增加 mfa

什麽是套接字描述符?(socket描述符)

套接字描述符是一個整數類型的值。每個進程的進程空間裏都有一個套接字描述符表,該表中存放著套接字描述符和套接字數據結構的對應關系。該表中有一個字段存放新創建的套接字的描述符,另一個字段存放套接字數據結構的地址,因此根據套接字描述符就可以找到其對應的套接字數據結構。每個進程在自己的進程空間裏都有一個套接字描述符表但是套接字數據結構都是在操作系統的內核緩沖裏。

-------------------------------------------------------

套接字接口為網絡通信增加了一個新的抽象,即套接字。和文件一樣,每個活動的套接字都有一個整數來標識,我們將其稱為套接字描述符。Windows操作系統為每個進程維護一個單獨的套接字描述符表。因此,應用程序可以擁有相同的文件描述符和套接字描述符。

套接字API裏有個函數socket,它就是用來創建一個套接字。套接字設計的總體思路是,單個系統調用就可以創建任何套接字,因為套接字是相當籠統的。一旦套接字創建後,應用程序還需要調用其他函數來指定具體細節。

了解套接字這個抽象概念的最簡單的方法是想象一下操作系統中的數據結構。當應用程序調用socket後,操作系統分配一個新的數據結構來保存通信所需的信息,並在進程套接字描述符表內增加一個條目,存儲指向這個數據結構的指針。下圖顯示了調用socket後的進程套接字描述符表。這裏socket調用的參數指定了協議族為PF_INET,服務類型為SOCK_STREAM。

技術分享

雖然套接字的內部數據結構包含很多字段,但是系統創建套接字後,大多數字字段沒有填寫。應用程序創建套接字後在該套接字可以使用之前,必須調用其他的過程來填充這些字段。

關於套接字描述符