套接字描述符的理解
一、首先明確 啥是“套接字”——所謂套接字就是對通訊端點的抽象。
套接字描述符——就如程式通過檔案描述符訪問檔案一樣,套接字描述符是訪問套接字的一種路徑。
從某種意義上說,套接字也在檔案,所以許多對檔案描述符使用的函式,對套接字描述符同樣適用,但是有些是不可使用的。
二、與套接字相關的兩個函式:int socket(int domain,int type,int protocol) /*返回一個套接字描述符*/
int shutdown(int socketfd,int how)
int socket(int domain,int type,int protocol)
其作用就是:返回一個套接字描述符
domain——套接字通訊域——的取值:AF_INET,AF_INET6,AF_UNIX,AF_UNSPEC
type————套接字型別——--的取值:SOCK_DGRAM,SOCK_RAW,SOCK_SEQPACKET,SOCK_STREAM
protocal——————————的取值:通常為0,表示按給定的域或套接字型別選擇預設協議。當對同一域和套接字型別支援多個協議時,可以使用protocol引數選擇一個特定協議。
int shutdown(int sockfd,int how)
作用就是:關閉sockfd指向的套接字的how。其中how的取值可以為:SHUT_RD,SHUT_WR,SHUT_RDWR
注:shutdown 與close的區別
close是指:關閉一個指向檔案的檔案描述符,其實只是關閉了這個檔案描述符對檔案表的指標。如果該檔案仍有其他檔案描 述符引用的話,該檔案的V節點表並沒有關閉。只有當關閉的檔案描述符是最後一個指向檔案的檔案描述符,V節點才能也被關閉。
而shutdown是關閉對一檔案的讀寫等屬性,不問有多少個檔案描述符對該檔案引用。
參考文獻:《unix環境高階程式設計》 第二版