位址族來自address family的翻譯,可以看成是套接字的型別,即不同的套接字對應不同的位址族。每種型別的套接字都擁有自己獨特的通訊定址方式。位址族的取值包括af_inet、af_inet6以及af_unspec等,這些值在winsock2.h中定義。
sockaddr結構用於儲存套接字位址。在windows vista之前的版本,sockaddr結構在winsock2.h中定義,在windows vista以及之後的版本中,sockaddr結構在ws2def.h中定義。其在winsock2.h中定義的格式為
struct sockaddr ;
其中,sa_family表示「1 套接字位址族」中提到的位址族;sa_data儲存了用於套接字定址所需要的資訊。sa_family的值是af_inet表示使用ipv4的定址方式;af_inet6表示使用ipv6的定址方式;af_unspec表示定址方式不確定,根據主機的服務確定任何合適的定址方式。在「1 套接字位址族」中提到,不同的位址族對應不同的套接字定址方式,其定址所需的資訊不同,即sa_data中儲存的資訊不同。所以,對於sa_family的不同取值,sockaddr結構有不同的格式。
當sa_family的值是af_inet時,表示使用ipv4的定址方式,其sockaddr結構對應的格式為
struct sockaddr_in ;
其中,sin_family的值必須是af_inet;sin_port表示埠號;sin_addr表示ip位址;sin_zero[8]是為了保證sockaddr_in的大小與sockaddr相同而進行的填零。也就是說,ipv4的套接字定址資訊包括埠號和ip位址。
當sa_family的值是af_inet6時,表示使用ipv6的定址方式,其sockaddr結構對應的格式為
struct sockaddr_in6 ;
當sa_family的值是af_irda時,表示使用紅外的定址方式,其sockaddr結構對應的格式為
typedef struct _sockaddr_irda sockaddr_irda, *psockaddr_irda, *lpsockaddr_irda;
套接字和位址
在客戶端 發起連線之前,伺服器端先進行初始化 bind int fd,void addr,socklen t len 一旦三次握手完成,服務端和客戶端建立連線,就進入了資料傳輸過程 當雙方完成互動後,需要執行close函式,作業系統核心通過原來的鏈結鏈路向伺服器端傳送乙個fin包,伺服器收到後執行被...
套接字位址結構
大多數套接字函式都需要乙個指向套接字位址結構的指標作為引數。每個協議簇抵都定義它自己的套接字位址結構 這些結構的名字均以sockaddr 開頭,並以對應每個協議簇的唯一字尾結尾 1.ipv4套接字位址結構 它以sockaddr in命名 struct in addr in addr t s addr...
Unix套接字位址結構
include ipv4套接字位址結構 struct in addr posix只關注sin family,sin port,sin addr,所有網路套接字地質結構都至少16位元組 struct sockaddr in include 通用套接字位址結構 struct sockaddr inclu...