国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 系統 > Unix > 正文

UNIX網絡編程讀書筆記:recvmsg和sendmsg函數

2024-06-28 13:27:21
字體:
來源:轉載
供稿:網友
UNIX網絡編程讀書筆記:recvmsg和sendmsg函數

這兩個函數是最通用的I/O函數。實際上我們可以把所有read、readv、recv和recvfrom調用替換成recvmsg調用。類似地,各種輸出函數調用也可以替換成sendmsg調用。

#include <sys/socket.h>ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags);返回:讀入或寫出字節數——成功;-1——出錯

這兩個函數把大部分參數封裝到一個msghdr結構中:

struct msghdr {    void            *msg_name;           /* PRotocol address */    socklen_t        msg_namelen;        /* size of protocol address */    struct iovec    *msg_iov;            /* scatter/gather array */    int              msg_iovlen;         /* # elements in msg_iov */    void            *msg_control;        /* ancillary data (cmsghdr struct) */    socklen_t        msg_controllen;     /* length of ancillary data */    int              msg_flags;          /* flags returned by recvmsg() */};

這里給出的msghdr結構符合POSIX規范。有些系統仍然使用本結構源自4.2BSD的較舊版本。這個較舊的結構沒有msg_flags成員,而且msg_control和msg_controllen成員分別被稱為msg_accrights和msg_accrightslen。這個較舊結構唯一支持的輔助數據形式用于傳遞文件描述字(稱為訪問權限)。

msg_name和msg_namelen這兩個成員用于套接口未連接的場合(譬如未連接UDP套接口)。它們類似reacvfrom和sendto的第5和第6個參數:msg_name指向一個套接口地址結構,調用者在其中存放接收者(對于sendmsg調用)或發送者(對于recvmsg調用)的協議地址。如果無需指明協議地址(例如對于TCP套接口或已連接UDP套接口),msg_name應置為空指針。msg_namelen對于sendmsg是一個值參數,對于recvmsg卻是一個值-結果參數。

msg_iov和msg_iovlen這兩個成員指定輸入或輸出緩沖區數組(即iovec結構數組),類似readv和writev的第2和第3個參數。

msg_control和msg_controllen這兩個成員指定可選的輔助數據的位置和大小。

對于recvmsg和sendmsg,我們必須區別它們的兩個標志變量:一個是傳遞值的flags參數,另一個是所傳遞msghdr結構的msg_flags成員,它傳遞的是引用,因為傳遞給函數的是該結構的地址。

紅心只有recvmsg使用msg_flags成員。recvmsg被調用時,flags參數被拷貝到msg_flags成員,并由內核使用其值驅動接收處理過程。內核還依據recvmsg的結構更新msg_flags成員的值。

紅心sendmsg忽略msg_flags成員,因為它直接使用flags參數驅動發送處理過程。這一點意味著如果想在某個sendmsg調用中設置MSG_DONTWAIT標志,那就把flags參數設置為該值;把msg_flags成員設置為該值不起作用。

如下圖所示,匯總了內核為相關輸入和輸出函數檢查的flags參數值以及recvmsg可能返回的msg_flags成員值。其中沒有sendmsg msg_flags一欄,因為本組合無效。

標志 內核檢查: send flags sendto flags sendmsg flags 內核檢查: recv flags recvfrom flags recvmsg flags 內核返回: recvmsg msg_flags
MSG_DONTROUTE MSG_DONTWAIT MSG_PEEK MSG_WAITALL          太陽          太陽           太陽           太陽           太陽
MSG_EOR MSG_OOB          太陽          太陽           太陽               太陽               太陽
MSG_BCAST MSG_MCAST MSG_TRUNC MSG_CTRUNC MSG_NOTIFICATION               太陽               太陽               太陽               太陽               太陽

這些標志中,內核只檢查而不返回前4個標志;既檢查又返回下2個標志;不檢查而只返回后5個標志。recvmsg返回的7個標志解釋如下:

MSG_BCAST    本標志隨BSD/OS引入,相對較新。它的返回條件是:本數據報作為鏈路層廣播收取或者其宿ip地址是一個廣播地址。

MSG_MCAST    本標志隨BSD/OS引入,相對較新。它的返回條件是:本數據報作為鏈路層多播收取。

MSG_TRUNC    本標志的返回條件是:本數據報被截斷;也就是說,內核預備返回的數據超過進程事先分配的空間(所有iov_len成員之和)。

MSG_CTRUNC  本標志的返回條件是:本數據報的輔助數據被截斷;也就是說,內核預備返回的輔助數據超過進程事先分配的空間(msg_controllen)。

MSG_EOR        如果返回的數據不是一個邏輯記錄的結尾所在,本標志將清零;否則本標志將設置。TCP不使用本標志,因為它是一個字節流協議。

MSG_OOB       本標志絕不為TCP帶外數據返回。它用于其他協議族(例如OSI協議族)。

MSG_NOTIFICATION    本標志的返回條件是:SCTP接收端讀入的本消息是一個事件通知,而不是一個數據消息。

如下圖所示,展示了一個msghdr結構以及它指向的各種信息。圖中假設進程即將對一個UDP套接口調用recvmsg。

image

圖中給協議地址分配了16個字節,給輔助數據分配了20個字節。為緩沖數據初始化了3個iovec結構構成的數組:第一個指定一個100字節的緩沖區,第二個指定一個60字節的緩沖區,第三個指定一個80字節的緩沖區。我們還假設已為這個套接口設置了IP_RECVDSTADDR套接口選項,以接收所讀取UDP數報的宿IP地址。

我們接著假設從192.6.38.100端口2000到達一個170字節的UDP數據報,它的目的地是我們的UDP套接口,宿IP地址為206.168.112.96。如下圖所示,展示了recvmsg返回時msghdr結構中的所有信息。(圖中被修改過的字段標了陰影)

image

紅心如下圖所示為5組I/O函數之間的差異:

image


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
精品美女调教视频| av三级在线观看| 男人天堂v视频| 亚洲私人影吧| 欧美日韩亚洲国内综合网| sese在线视频| 1区2区3区在线| 国产视频青青| 中文字幕4区| 欧美精品日韩少妇| 国产一卡2卡3卡4卡网站免费| 欧美日韩综合高清一区二区| 超碰在线网站| 国产小视频在线高清播放| 精品国产高清a毛片无毒不卡| 午夜在线视频| 国产小视频免费在线观看| 精品国内自产拍在线视频| 男人天堂v视频| 精品电影在线| 国产精选在线观看| 亚洲妇熟xxxx妇色黄| 中文字幕专区| 亚洲社区在线| 国产精品久久久久久久牛牛| 日本在线观看网站| 国产一级粉嫩xxxx| 青青免费在线视频| 999在线视频| 88av在线| www.国产精品.com| 在线中文字幕资源| 国产网友自拍视频导航网站在线观看| 午夜影院在线| 亚洲第一页在线播放| 国产精品178页| 国产野外战在线播放| 爱福利在线视频| 伊人中文在线| 在线免费观看你懂的| 国产成人精品久久一区二区小说| 久久精品蜜桃| 天天激情综合| 中文字幕av高清| 国产超级va在线视频| 中文字幕在线免费看| 国产尤物视频在线| 老司机精品视频一区二区| 亚洲日本久久久午夜精品| 国产98在线| 18 激情视频在线| 2020国产在线视频| 一本免费视频| 亚洲va国产日韩欧美精品色婷婷| 国产成人久久精品77777| 国产精品㊣新片速递bt| 免费高清视频日韩| а√天堂8资源在线官网 | 国产乱妇乱子| 激情丁香在线| 国产午夜在线| 精品卡1卡2卡三卡免费网站| 先锋影音av中文字幕| 人日人天天爽| 中文字幕一区免费| 国产高清自拍视频在线观看| 国产aa视频| 国产在线观看a| 国产二区三区在线| 2020亚洲男人天堂| 久久一本精品| 国产精品人人| 性网站在线观看| 国产三区视频在线观看| av网站大全在线| 综合图区亚洲白拍在线 | 国产三级自拍| 国产高清在线观看| 老师我好爽再深一点的视频| 国产系列在线观看| 超碰在线国产| 亚洲精品一区中文字幕电影| 99色在线视频| 亚洲欧洲成人| 2021天堂中文幕一二区在线观| 可以免费看污视频的网站| 69精品视频| 国产小视频在线观看| 青青久在线视频免费观看| 国产超碰在线| 国产精品国产国产aⅴ| 国内外激情在线| 亚洲videos| 先锋av资源网| 91精品国产高久久久久久五月天| 国产原创av在线| 激情六月婷婷| 黄色在线视频观看网站| 亚洲天堂视频在线观看免费| 国产传媒在线播放| 国产精品冒白浆免费视频 | 国产一级又黄| 国产无遮挡又黄又爽免费网站| 九七电影韩国女主播在线观看| 亚洲精品午夜级久久久久| 在线观看精品一区二区三区| 97中文字幕| 日本一级理论片在线大全| 伊人久久青青草| 一二三四区在线观看| 亚洲an天堂an在线观看| 国产经典自拍视频在线观看| 国产精品视频一区二区三区麻豆| 中文字幕免费在线视频| 国产免费电影网站入口| 国产在线视频精品视频免费看| 免费在线黄色av| 黄色av网站在线| 最新中文字幕在线| 国产成a人亚洲精v品| www久久日com| 国产麻豆精品视频一区二区| 91sp网站在线观看入口| 国产一级片在线播放| 99久久精品免费观看国产| www在线播放| 成年午夜在线| 国产国产人免费人成免费视频| 在线视频婷婷| 国产在线一二三| 91在线视频免费看| 激情丁香在线| 一区免费观看| 国产一级免费| 开心婷婷激情五月| 中文字幕av在线播放| 黄色毛片在线观看| 精品视频一区二区观看| 国产免费黄视频在线观看| 伊人春色在线| 国产精品被窝福利一区 | 久热精品免费视频| 国产精品久久精品牛牛影视| 日本欧美在线视频免费观看| 国产九色视频| www.大网伊人| 在线视频观看亚洲| 国产网红在线| 天天av天天爱| 超碰在线网站| 欧美国产中文| 中文av在线播放| 69免费视频| 精品网站www| 国产精品186在线观看在线播放 | 国产系列在线观看| 交换国产精品视频一区| 中文字幕av高清在线观看| 国产视频中文字幕| 免费a级在线播放| av在线free| www.狠狠| 免费99热在线观看| 日本免费不卡| 日本在线视频www鲁啊鲁| av网址在线免费观看| 亚洲综合激情六月婷婷在线观看| 国产经典自拍视频在线观看| 国产精品99999| 在线一区观看| 俺来俺也去www色在线观看| 欧美另类在线视频| 国产69久久| 国产黄在线观看免费观看不卡| 国产性色视频| 精品美女在线观看视频在线观看| 国产成+人+亚洲+欧美+综合| 91亚洲天堂| 在线观看免费黄色| www.国产精| 国产亚av手机在线观看| 中文字幕网在线| 在线激情小视频| 久草.com| 国产91久久久久| 欧美高清视频| 国产黄色片中文字幕| 亚洲精品少妇久久久久久| 国产在线视频福利| 国产精品久久久高清免费| av在线第一页| 中文字幕成人乱码在线电影| 在线播放www| 国产中文字幕在线视频| 国产黄视频网站| 久久一本精品| 午夜影院免费| 国产福利在线看| 黄色一级片视频| 日本一级理论片在线大全|