国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Unix > 正文

UNIX網絡編程讀書筆記:套接口地址結構

2024-06-28 13:27:32
字體:
來源:轉載
供稿:網友
UNIX網絡編程讀書筆記:套接口地址結構前言

大多數套接口函數都需要一個指向套接口地址結構的指針作為參數。每個協議族都定義它自己的套接口地址結構。這些結構的名字均以“sockaddr_”開頭,并以對應每個協議族的唯一后綴結束。

ipv4套接口地址結構

IPv4套接口地址結構通常也稱為”網際套接口地址結構“,它以”sockaddr_in“命名,定義在頭文件<netinet/in.h>中。其POSIX定義如下:

/* sockaddr_in */struct in_addr {    in_addr_t        s_addr;         /* 23 bits IPv4 address */};                                   /* network byte ordered */struct sockaddr_in {    uint8_t          sin_len;        /* length of structure(16) */    sa_family_t      sin_family;     /* AF_INET */    in_port_t        sin_port;       /* 16-bit TCP or UDP port number */                                     /* network byte ordered */    struct in_addr   sin_addr;       /* 32-bit IPv4 address */                                     /* network byte ordered */    char             sin_zero[8];    /* unused */};
說明:

(1)除非涉及到路由套接口,否則對于長度成員sin_len,我們無需設置,也無需檢查

(2)IPv4地址和TCP或UDP端口號在套接口地址結構中總是以網絡字節序來存儲,我們在使用這些成員時,必須牢記這一點。

(3)可以有兩種不同的方法來訪問32位IPv4地址。例如如果serv定義為網際套接口地址結構,那么serv.sin_addr給出的32位IPv4地址將是一個in_addr結構,而serv.sin_addr.s_addr給出的32位IPv4地址則是一個in_addr_t(通常是無符號的32位整數)。

(4)sin_zero成員暫不使用,但總是將它設置為0. 為方便起見,在初始化結構時,我們一般是將整個結構設置為0,而不僅僅是設置sin_zero成員為0. 雖然多數結構的使用不要求這一成員為0,但當捆綁一個非通配IPv4地址時,此成員必須為0.

(5)套接口地址結構僅在給定主機上使用:雖然結構中的某些成員(如IP地址和端口號)用在不同主機間的通信中,但結構本身并不參與通信。

通用套接口地址結構

當作為參數傳遞給任一個套接口函數時,套接口地址結構總是通過指針來傳遞,但是,通過指針來取得此參數的套接口函數必須處理來自所支持的任何協議族的套接口地址結構。

有一個問題是如何聲明所傳指針的數據類型。ANSI C 中有很簡單的解決辦法:它有通用的指針類型void *。但是,套接口函數是在ANSI C 之前定義的。1982年采用了這一的一個辦法:在<sys/socket.h>頭文件中定義一個通用的套接口地址結構,如下:

/* sockaddr */struct sockaddr {    uint8_t        sa_len;        sa_family_t    sa_family;        /* address family: AF_xxx value */    char           sa_data[14];      /* PRotocol-specific address */};

于是,套接口函數被定義為采用指向通用套接口地址結構的指針。這就要求對這些函數的任何調用都必須將指向特定于協議的套接口地址結構的指針類型轉換成指向通用套接口地址結構的指針。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新民市| 格尔木市| 六枝特区| 绥芬河市| 黄浦区| 甘孜县| 突泉县| 柳州市| 洪湖市| 盈江县| 肃宁县| 忻州市| 武义县| 方城县| 清丰县| 镶黄旗| 五台县| 塔城市| 绥阳县| 丹寨县| 闽清县| 栾城县| 奉新县| 寻甸| 泸定县| 达孜县| 镇原县| 临泉县| 思茅市| 巴中市| 大竹县| 平南县| 镇江市| 靖宇县| 海盐县| 西安市| 固阳县| 武隆县| 深州市| 泰兴市| 集安市|