Socket描述符解釋

2021-08-09 23:34:05 字數 907 閱讀 8832

因為套接字api最初是作為unix作業系統的一部分而開發的,所以套接字api與系統的其他i/o裝置整合在一起。特別是,當應用程式要為網際網路通訊而建立乙個套接字(socket)時,作業系統就返回乙個小整數作為描述符(descriptor)來標識這個套接字。然後,應用程式以該描述符作為傳遞引數,通過呼叫函式來完成某種操作(例如通過網路傳送資料或接收輸入的資料)。

要點 當應用程式要建立乙個套接字時,作業系統就返回乙個小整數作為描述符,應用程式則使用這個描述符來引用該套接字。

int socket(int domain, int type, int protocol);domain指明所使用的協議族,通常為pf_inet,表示網際網路協議族(tcp/ip協議族);type引數指定socket的型別:sock_stream 或sock_dgram,socket介面還定義了原始socket(sock_raw),允許程式使用低層協議;protocol通常賦值"0"。socket()呼叫返回乙個整型socket描述符,你可以在後面的呼叫使用它。 socket描述符是乙個指向內部資料結構的指標,它指向描述符表入口。呼叫socket函式時,socket執行體將建立乙個socket,實際上"建立乙個socket"意味著為乙個socket資料結構分配儲存空間。 socket執行體為你管理描述符表。兩個網路程式之間的乙個網路連線包括五種資訊:通訊協議、本地協議位址、本地主機埠、遠端主機位址和遠端協議埠。

該函式如果呼叫成功就返回新建立的套接字的描述符,如果失敗就返回invalid_socket。套接字描述符是乙個整數型別的值。每個程序的程序空間裡都有乙個套接字描述符表,該表中存放著套接字描述符和套接字資料結構的對應關係。該表中有乙個字段存放新建立的套接字的描述符,另乙個字段存放套接字資料結構的位址,因此根據套接字描述符就可以找到其對應的套接字資料結構。每個程序在自己的程序空間裡都有乙個套接字描述符表但是套接字資料結構都是在作業系統的核心緩衝裡。

設定socket描述符SO REUSEADDR屬性

在使用tcp連線方式的時候,當乙個繫結到指定埠的描述符主動斷開時,在這個埠上的連線將進入time wait狀態,並且會等待2 msl時間才釋放。如果在這個時間內,需要再次繫結相同的指定的埠,就需要設定描述符的so reuseaddr屬性,否則繫結會失敗。char rep 1 setsockopt s...

Socket描述符選項 SOL SOCKET

socket描述符選項 sol socket include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數l...

socket描述符選項 SOL SOCKET

include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數level是被設定的選項的級別,如果想要在套接字...