日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

套接字结构

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 套接字结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

套接字編程簡介

最近在看《UNIX網絡編程卷一》,算是寫的讀書筆記吧.

IPv4套接字地址結構

IPv4套接字地址結構定義在 < netinet/in.h > 頭文件中.它以 sockaddr_in 命名.下面是它的結構體:

struct in_addr {in_addr_t s_addr; 32位IPv4地址,網絡字節序 };struct sockaddr_in {uint8_t sin_len;sa_family_t sin_family; 協議類型in_port_t sin_port; 端口號struct in_addr sin_addr; char sin_zero[8]; }
  • 結構體中的sin_len通常是不用設置的,它存在的目的是為了簡化長度可變套接字地址結構的處理.
  • sin_zero[8]總是被設置為0.按照慣例,整個結構體都會被初始化為0,所以這個未曾使用的數組一般不用特意去管它.
  • 在結構體in_addr中的in_addr_t類型一般為 uint32_t ,而 in_port_t 通常為 uint16_t .

值-結果參數

本來這一部分的內容不多,但是我覺得這是一個很好的解決小問題的思路.于是單拿出來寫一寫.

當往一個套接字函數傳遞套接字地址結構的時候,結構總是以引用(也就是指針)的形式來傳遞,同時參數中還會指明該結構體的
長度.但是長度的傳遞方式則取決于傳遞的方向:從進程到內核或者從內核到進程.

  • 當長度是從進程傳遞到內核的時候,參數是結構體的整數大小,從而使內核知道到底要從進程復制多少數據,從哪復制數據進來.

  • 從內核到進程傳遞套接字地址結構的時候,參數則是指向結構體大小的指針.當函數被調用的時候,它的作用是告訴內核結構體的長度,
    以免內核在寫結構體時越界.當函數返回的時候,結構大小的指針又是一個結果,它告訴進程,內核在該結構體中究竟存儲了多少信息.

  • 這種類型的參數成為 值-結果參數.這個參數在被調用時和返回時代表著兩個不同的含義.

字節操縱函數

Berkeley函數由于兼容性的問題早已經不推薦使用了,所以我也就不再介紹了.

void *memset (void *dest,int c,size_t len);void *memcpy (void *dest,const void *src,size_t nbytes);int memcmp(const void *ptr1,const void *ptr2,size_t nbytes);

函數名寫的比較明確,這三個函數分別是memory set,memory copy以及memory compare.所以就不詳細講了.

int inet_aton(const char *strptr,struct in_addr *addrptr);in_addr_t inet_addr(const char *strptr);char *inet_ntoa(struct in_addr inaddr);
  • inet_aton : 將字符串轉換為in_addr并存入我們傳入的in_addr參數.
  • inet_addr : 將字符串轉化為in_addr_t(也就是in_addr結構體中的內容類型),并將其返回.
    • inet_ntoa : 將結構體in_addr轉化為字符串并返回.

需要注意的是,inet_aton中的第二個參數struct in_addr可以傳入空指針,此時函數只會檢查字符串的有效性,不會存儲結果.

I/O讀寫函數

字節流套接字(例如TCP套接字)上的調用read或者write函數的時候得到的字節數可能會比請求的要少,這是由于套接字緩沖區已經滿了的
原因.稍后我會再推薦一篇關于套接字緩沖區的內容.

在本書中還寫了三個函數用來包裝read,write和readline,目的就是為了解決讀出的字節與請求字節不相同的問題.其中的關鍵點就是通過
重復調用函數,并且對函數的返回值加以判斷,如果是0或者EINTR的話就繼續循環,直到讀出請求的字節數為止.

轉載于:https://www.cnblogs.com/xinglong/p/5927629.html

總結

以上是生活随笔為你收集整理的套接字结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。