struct sockaddr ;
sa_family是位址家族,一般都是「af_***」的形式。好像通常大多用的是都是af_inet。
sa_data是14位元組協議位址。
此資料結構用做bind、connect、recvfrom、sendto等函式的引數,指明位址資訊。
但一般程式設計中並不直接針對此資料結構操作,而是使用另乙個與sockaddr等價的資料結構
sockaddr_in(在netinet/in.h中定義):
struct sockaddr_in ;
struct in_addr ;
typedef struct in_addr
s_un_b;
struct s_un_w;
unsigned long s_addr;
} s_un;
} in_addr;
sin_family指代協議族,在socket程式設計中只能是af_inet
sin_port儲存埠號(使用網路位元組順序)
sin_addr儲存ip位址,使用in_addr這個資料結構
sin_zero是為了讓sockaddr與sockaddr_in兩個資料結構保持大小相同而保留的空位元組。
s_addr按照網路位元組順序儲存ip位址
sockaddr_in和sockaddr是並列的結構,指向sockaddr_in的結構體的指標也可以指向
sockadd的結構體,並代替它。 也就是說,你可以使用sockaddr_in建立你所需要的資訊,
在最後用進行型別轉換就可以了bzero((char*)&mysock,sizeof(mysock));//初始化
mysock結構體名
mysock.sa_family=af_inet;
mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
……等到要做轉換的時候用:
(struct sockaddr*)mysock
套接字位址族與sockaddr結構
位址族來自address family的翻譯,可以看成是套接字的型別,即不同的套接字對應不同的位址族。每種型別的套接字都擁有自己獨特的通訊定址方式。位址族的取值包括af inet af inet6以及af unspec等,這些值在winsock2.h中定義。sockaddr結構用於儲存套接字位址。在...
sockaddr資料結構
strcutsockaddr 很多網路程式設計函式誕生早於ipv4協議,那時候都使用的是sockaddr結構體,為了向前相容,現在sockaddr退化成了 void 的作用,傳遞乙個位址給函式,至於這個函式是sockaddr in還是sockaddr in6,由位址族確定,然後函式內部再強制型別轉化...
sockaddr與sockaddr in的比較
struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...