網路程式設計 套接字結構

2021-09-25 14:52:08 字數 1761 閱讀 9852

每個協議族都定義了自己的套接字結構,這些結構均以sockaddr_開頭,並對應每個協議族自己的唯一字尾

當向任意乙個引數傳遞任何套接字函式時,套接字位址結構總是以引用形式傳遞

網路程式設計資料型別(posix規範)

資料型別

說明標頭檔案

int8_t

帶符號8位整數

uint8_t

無符號8位整數

int16_t

帶符號16位整數

uint16_t

無符號16位整數

int32_t

帶符號32位整數

uint32_t

無符號32位整數

sa_family_t

套接字位址結構的位址族

socklen_t

套接字位址結構的長度,一般為unit32_t

in_addr_t

ipv4位址,一般為uint32_t

in_port_t

tcp或udp埠,一般為unit16_t

ipv4套接字位址結構

////固定長度-16位元組

struct in_addr

;struct sockaddr_in

;//in_addr_t資料型別必須是乙個至少32位的無符號整數型別

//in_port_t必須是乙個至少16位的無符號整數型別

//sa_family_t可以是任何無符號整數型別

//可以看到sin_addr是在in_addr結構中定義的,歷史原因在這裡不做**

//但注意serv.sin_addr.s_addr和serv.sin_addr是完全不同的,乙個傳遞32位整數,乙個傳遞結構

//套接字位址結構僅在給定主機上使用,雖然ip位址和埠號在主機間傳遞,但是結構本身並不在主機之間傳遞

通用套接字位址結構

//解決傳遞指標時資料型別的處理問題

//struct sockaddr

;//套接字函式被定義為以指向某個通用套接字位址結構的乙個指標作為其引數之一

//如:int bind(int, struct sockaddr *, socklen_t);

//使用時需強制型別轉換成通用套接字位址結構的指標

//如: struct sockaddr_in serv;

// bind(sockfd, (struct sockaddr *) &serv, sizeof(serv);

//在核心中檢查sa_family確定套接字的真實型別

ipv6套接字位址結構

////固定長度-28位元組

struct in6_addr

;#define sin6_len  //編譯時確定

struct sockaddr_in6

;//如果系統支援長度字段,sin6_len必須定義

//結構本身64位對齊,做過處理

//sin6_flowinfo分成兩個字段

//低位20位是流標

//高序12位保留

//對於具備範圍的位址,sin6_scope_id欄位標識其範圍,最常見的鏈路區域性位址的介面索引

新的通用套接字位址結構

//struct sockaddr_storage

;//a.可以滿足所有套接字結構中最苛刻的對齊要求

//b.足夠大

//其它的型別對使用者透明,只有強制型別轉換或者複製到某個確定的套接字結構中,才能訪問其它字段

Linux網路程式設計 套接字結構

1,結構體 struct sockaddr,struct sockaddr in,struct in addr 通用套接字資料結構 struct sockaddr實際使用的套接字資料結構,二者可以進行型別轉換 struct sockaddr in struct in addr 2,主機位元組序和網路...

網路套接字程式設計

1。位元組序 小位元組 低位儲存在低位元組 大位元組 低位儲存在高位元組 簡單程式判斷 int islittle 2.hostent結構 struct hostent define h addr h addr list 0 這裡是這個資料結構的詳細資料 struct hostent h name 位...

網路程式設計套接字

建立 函式原型 int socket int domain int type int protocol 引數說明 domain 協議域,又稱協議族 family 常用的協議族有af inet af inet6 af local 或稱af unix,unix域socket af route等。協議族決...