《unix網路程式設計》第三章筆記
每個協議族都定義了自己的套接字位址結構。這些結構體的名字均以sockaddr_開頭,並以對應每個協議族的唯一字尾結尾。
ipv4套接字位址結構,以sockaddr_in命名,定義在標頭檔案中
struct in_addr {
in_addr_t s_addr;// uint32_t ipv4 address, network byte ordered
}struct sockaddr_in
每當乙個套接字函式需要乙個指向某個套接字位址結構的時候,都需要將這個指標強制型別轉換成乙個通用套接字結構的指標。通用套接字結構如下:
struct sockaddr
注意到上面結構體中的埠號和位址需要以網路位元組序儲存。所謂網路位元組序就是大端儲存。
把某個系統所用的位元組序稱為主機子節序,可能是大端,也可能是小端。判斷主機位元組序程式:
int main(void)
un; un.s = 0x0102;
if (sizeof(short) == 2)
else if (un.c[0] == 2 && un.c[1] == 1)
else
}
else
return 0;
}
#include uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
h代表host,n代表network,s代表short,l代表long。即使在64位主機上,s和l仍舊表示16位和32位的值。
套接字位址結構
大多數套接字函式都需要乙個指向套接字位址結構的指標作為引數。每個協議簇抵都定義它自己的套接字位址結構 這些結構的名字均以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...
通用套接字位址結構
1.通用套接字位址結構起因 當作為乙個引數傳遞進任何套接字函式時候,套接字位址結構總是以引用的形式來傳遞,並且,這樣有乙個引數的人核桃皆自函式必須處理例子所有支援的任何協議族的套接字位址結構。因此在標頭檔案中定義了乙個通用的套接字位址結構。2.通用套接字位址結構 include struct soc...