UNP 第三章,套接字程式設計介紹

2022-03-28 01:37:38 字數 806 閱讀 2467

1.套接字結構

多數套接字函式都有套接字結構引數,每個協議族都定義了自己的套接字結構,以 sockaddr_ 開始,並對應協議族的唯一字尾。

struct

sockaddr_in

對應用層程式設計而言,重要的只有:

sin_family, sin_addr, sin_port

2.位元組序

網路位元組序為大端,即先儲存資料高位。

小端,則為 先儲存資料地位。

可以如下判斷主機位元組序:

union c

;c.b = 0x0102

if (c.b[0] == 2 && c.b[1] == 1)

else

if (c.b[0] == 1 && c.b[1] == 2)

else

對於大小端轉換函式,推薦 inet_pton, inet_ntop

不推薦 inet_aton, inet_ntoa,因為不支援 ipv6

3.封裝api

為了相容多種情況(如ipv4和ipv6的移植),可以進行如下封裝:

char *sock_ntop(

const

struct sockaddr *sa, socklen_t salen)

}

套接字的讀寫不同於一般檔案讀寫,套接字讀寫,即使返回值未達到預期,也不一定錯誤,因為可能是緩衝區滿了,就需要將剩下的資料繼續操作。

類似的,其他緩衝區(如管道)讀寫也是這樣。

所以需要封裝 readn, writen 等函式。

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

include unp.h struct in addr struct sockaddr in tcp或者埠總是以網路位元組序來儲存 套接字位址結構僅僅在給定主機上使用,雖然某些字段用於通訊,但是結構本身並不用於通訊 通用套接字位址結構 作為引數傳遞任何套接字函式的時候,套接字總是以引用的方式傳遞,...

《UNIX網路程式設計》 第三章 套接字程式設計簡介

ipv4的位址結構為sockaddr in,ipv6為sockaddr in6,鏈路協議sockaddr dl,unix域為sockaddr un,儲存為sockaddr storage。套接字位址結構總是以引用形式來傳遞!struct in addr struct sockaddr in ipv4...

UNP讀書筆記第三章

網路位元組序和主機位元組序大小端不一樣。linux提供了4個轉換函式 include uint16 t htons uint16 t value uint32 t htonl uint 32t value uint16 t ntohs uin16 t value uint32 t ntohl uin...