UNIX網路程式設計(三) 套接字程式設計簡介

2021-09-22 08:00:50 字數 2099 閱讀 3684

unix網路程式設計 第3章   套接字程式設計簡介

一、套接字位址基本結構

大多數套接字位址結構以sockaddr_in命名,每個協議族都定義它的套接字位址結構。

1)ipv4套接字位址結構

為什麼in_addr結構體內僅有乙個in_addr_t欄位的結構?

以前位址被分為a,b,c類的時候,為了便於獲得位址中的適當位元組,允許訪問乙個32位ipv4位址中的所有4個位元組,或者訪問它的2個16位值。隨著子網劃分技術和無類位址編排的出現,不再需要了。

套接字位址結構僅在主機上使用,但並不在主機之間傳遞。

2)通用套接字位址結構

其實通用套接字struct sockaddr結構體的大小(16位元組)和常用的套接字位址struct sockaddr_in大小一樣。

3)ipv6套接字位址結構

4) 新的通用套接字位址結構

二、值-結果引數

從核心到程序傳遞套接字結構的函式有4個:accept、recvfrom、getsockname和getpeername。這4個函式的其中兩個引數是:套接字結構的指標 和 該結構大小的指標。

原因在於:當函式被呼叫時,結構大小是乙個值,它告訴核心該結構的大小,這樣核心在寫該結構時不至於越界;當函式返回時,結構大小又是乙個結果,它告程序  核心在改結構中究竟儲存了多少資訊。這些型別的引數稱為值-結果引數。

一句話概括:

從程序傳遞給核心的引數是需要讓核心知道核心需要讀取多少位元組

從核心傳遞給核心的引數是需要讓程序知道核心給程序寫了多少位元組

三、位元組排序函式

這兩種格式都有系統可以使用,給定系統所用的位元組序稱為主機位元組序。網路協議指定乙個網路位元組序(採用大端)。

這兩種位元組序之間的轉換函式:

五、inet_aton   inet_addr 和 inet_ntoa 位址轉換函式

a:asic   n:numeric

由於inet_addr不能處理255.255.255.255(有限廣播位址)轉化為二進位制,因為它出錯時返回inaddr_none(通常是乙個32位均為1的值)

六、函式:inet_pton 和 inet_ntop函式

這兩個函式是隨ipv6出現的新函式,對於ipv4和ipv6都適用。

第二個函式strprt不能是空指標,呼叫者必須為目標儲存單元分配記憶體並指定其大小。呼叫成功,這個指標就是該函式的返回值。如果len太小,則返回乙個空指標,並且置errno為 enospc。

七、本書中編寫的幾個函式(p70,72)

UNIX網路程式設計 三 套接字位址結構

1.ipv4套接字位址結構 ipv4套接字位址以sockaddr in命名,定義在標頭檔案中。位址結構 struct in addr struct sockaddr in 2.通用套接字位址結構 對於大多數套接字函式 比如 bind,connect,sendto等等 的引數通常是套接字位址結構的引用...

Unix網路程式設計 1 套接字位址結構

ubuntu usr include netinet in.h includestruct in addr struct sockaddr in sin len 結構體長度字段。sin family 協議族字段。可取的值為 af unix 本地通訊 af inet ipv4 af int6 ipv6...

UNIX網路程式設計卷一 3 套接字程式設計簡介

1 套接字位址結構 ipv4套接字位址結構 struct in addr struct sockaddr in 2 通用套接字位址結構 struct sockaddr 3 值 結果引數 4 位元組序排序函式 另一種方法是將高序位元組儲存在起始位址,這稱為大端位元組序。include uint32 t...