亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > Unix > 正文

UNIX網(wǎng)絡(luò)編程讀書(shū)筆記:recvmsg和sendmsg函數(shù)

2024-06-28 13:27:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
UNIX網(wǎng)絡(luò)編程讀書(shū)筆記:recvmsg和sendmsg函數(shù)

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

#include <sys/socket.h>ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags);返回:讀入或?qū)懗鲎止?jié)數(shù)——成功;-1——出錯(cuò)

這兩個(gè)函數(shù)把大部分參數(shù)封裝到一個(gè)msghdr結(jié)構(gòu)中:

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結(jié)構(gòu)符合POSIX規(guī)范。有些系統(tǒng)仍然使用本結(jié)構(gòu)源自4.2BSD的較舊版本。這個(gè)較舊的結(jié)構(gòu)沒(méi)有msg_flags成員,而且msg_control和msg_controllen成員分別被稱為msg_accrights和msg_accrightslen。這個(gè)較舊結(jié)構(gòu)唯一支持的輔助數(shù)據(jù)形式用于傳遞文件描述字(稱為訪問(wèn)權(quán)限)。

msg_name和msg_namelen這兩個(gè)成員用于套接口未連接的場(chǎng)合(譬如未連接UDP套接口)。它們類似reacvfrom和sendto的第5和第6個(gè)參數(shù):msg_name指向一個(gè)套接口地址結(jié)構(gòu),調(diào)用者在其中存放接收者(對(duì)于sendmsg調(diào)用)或發(fā)送者(對(duì)于recvmsg調(diào)用)的協(xié)議地址。如果無(wú)需指明協(xié)議地址(例如對(duì)于TCP套接口或已連接UDP套接口),msg_name應(yīng)置為空指針。msg_namelen對(duì)于sendmsg是一個(gè)值參數(shù),對(duì)于recvmsg卻是一個(gè)值-結(jié)果參數(shù)。

msg_iov和msg_iovlen這兩個(gè)成員指定輸入或輸出緩沖區(qū)數(shù)組(即iovec結(jié)構(gòu)數(shù)組),類似readv和writev的第2和第3個(gè)參數(shù)。

msg_control和msg_controllen這兩個(gè)成員指定可選的輔助數(shù)據(jù)的位置和大小。

對(duì)于recvmsg和sendmsg,我們必須區(qū)別它們的兩個(gè)標(biāo)志變量:一個(gè)是傳遞值的flags參數(shù),另一個(gè)是所傳遞msghdr結(jié)構(gòu)的msg_flags成員,它傳遞的是引用,因?yàn)閭鬟f給函數(shù)的是該結(jié)構(gòu)的地址。

紅心只有recvmsg使用msg_flags成員。recvmsg被調(diào)用時(shí),flags參數(shù)被拷貝到msg_flags成員,并由內(nèi)核使用其值驅(qū)動(dòng)接收處理過(guò)程。內(nèi)核還依據(jù)recvmsg的結(jié)構(gòu)更新msg_flags成員的值。

紅心sendmsg忽略msg_flags成員,因?yàn)樗苯邮褂胒lags參數(shù)驅(qū)動(dòng)發(fā)送處理過(guò)程。這一點(diǎn)意味著如果想在某個(gè)sendmsg調(diào)用中設(shè)置MSG_DONTWAIT標(biāo)志,那就把flags參數(shù)設(shè)置為該值;把msg_flags成員設(shè)置為該值不起作用。

如下圖所示,匯總了內(nèi)核為相關(guān)輸入和輸出函數(shù)檢查的flags參數(shù)值以及recvmsg可能返回的msg_flags成員值。其中沒(méi)有sendmsg msg_flags一欄,因?yàn)楸窘M合無(wú)效。

標(biāo)志 內(nèi)核檢查: send flags sendto flags sendmsg flags 內(nèi)核檢查: recv flags recvfrom flags recvmsg flags 內(nèi)核返回: recvmsg msg_flags
MSG_DONTROUTE MSG_DONTWAIT MSG_PEEK MSG_WAITALL          太陽(yáng)          太陽(yáng)           太陽(yáng)           太陽(yáng)           太陽(yáng)
MSG_EOR MSG_OOB          太陽(yáng)          太陽(yáng)           太陽(yáng)               太陽(yáng)               太陽(yáng)
MSG_BCAST MSG_MCAST MSG_TRUNC MSG_CTRUNC MSG_NOTIFICATION               太陽(yáng)               太陽(yáng)               太陽(yáng)               太陽(yáng)               太陽(yáng)

這些標(biāo)志中,內(nèi)核只檢查而不返回前4個(gè)標(biāo)志;既檢查又返回下2個(gè)標(biāo)志;不檢查而只返回后5個(gè)標(biāo)志。recvmsg返回的7個(gè)標(biāo)志解釋如下:

MSG_BCAST    本標(biāo)志隨BSD/OS引入,相對(duì)較新。它的返回條件是:本數(shù)據(jù)報(bào)作為鏈路層廣播收取或者其宿ip地址是一個(gè)廣播地址。

MSG_MCAST    本標(biāo)志隨BSD/OS引入,相對(duì)較新。它的返回條件是:本數(shù)據(jù)報(bào)作為鏈路層多播收取。

MSG_TRUNC    本標(biāo)志的返回條件是:本數(shù)據(jù)報(bào)被截?cái)?;也就是說(shuō),內(nèi)核預(yù)備返回的數(shù)據(jù)超過(guò)進(jìn)程事先分配的空間(所有iov_len成員之和)。

MSG_CTRUNC  本標(biāo)志的返回條件是:本數(shù)據(jù)報(bào)的輔助數(shù)據(jù)被截?cái)?;也就是說(shuō),內(nèi)核預(yù)備返回的輔助數(shù)據(jù)超過(guò)進(jìn)程事先分配的空間(msg_controllen)。

MSG_EOR        如果返回的數(shù)據(jù)不是一個(gè)邏輯記錄的結(jié)尾所在,本標(biāo)志將清零;否則本標(biāo)志將設(shè)置。TCP不使用本標(biāo)志,因?yàn)樗且粋€(gè)字節(jié)流協(xié)議。

MSG_OOB       本標(biāo)志絕不為TCP帶外數(shù)據(jù)返回。它用于其他協(xié)議族(例如OSI協(xié)議族)。

MSG_NOTIFICATION    本標(biāo)志的返回條件是:SCTP接收端讀入的本消息是一個(gè)事件通知,而不是一個(gè)數(shù)據(jù)消息。

如下圖所示,展示了一個(gè)msghdr結(jié)構(gòu)以及它指向的各種信息。圖中假設(shè)進(jìn)程即將對(duì)一個(gè)UDP套接口調(diào)用recvmsg。

image

圖中給協(xié)議地址分配了16個(gè)字節(jié),給輔助數(shù)據(jù)分配了20個(gè)字節(jié)。為緩沖數(shù)據(jù)初始化了3個(gè)iovec結(jié)構(gòu)構(gòu)成的數(shù)組:第一個(gè)指定一個(gè)100字節(jié)的緩沖區(qū),第二個(gè)指定一個(gè)60字節(jié)的緩沖區(qū),第三個(gè)指定一個(gè)80字節(jié)的緩沖區(qū)。我們還假設(shè)已為這個(gè)套接口設(shè)置了IP_RECVDSTADDR套接口選項(xiàng),以接收所讀取UDP數(shù)報(bào)的宿IP地址。

我們接著假設(shè)從192.6.38.100端口2000到達(dá)一個(gè)170字節(jié)的UDP數(shù)據(jù)報(bào),它的目的地是我們的UDP套接口,宿IP地址為206.168.112.96。如下圖所示,展示了recvmsg返回時(shí)msghdr結(jié)構(gòu)中的所有信息。(圖中被修改過(guò)的字段標(biāo)了陰影)

image

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

image


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产视频一区免费看| 日皮视频免费观看| 亚洲v日本v欧美v久久精品| 欧美黑人疯狂性受xxxxx野外| 水野朝阳av一区二区三区| 污网站免费观看| 日韩啪啪网站| 在线不卡日本v二区707| 欧美激情a在线| 亚洲人成电影在线| 麻豆传媒视频在线| 亚洲熟妇无码一区二区三区导航| 黄色一级a毛片| 国产精品毛片一区二区三区四区| 欧美精品电影免费在线观看| 中文字幕无码日韩专区免费| 久久中文精品视频| 中文字幕免费一区| 亚洲啪啪综合av一区二区三区| 日本国产一区二区三区| 亚洲一区不卡在线| 成人免费在线观看网站| 亚洲国产一区二区久久久777| 亚洲第一综合天堂另类专| heyzo久久| 欧美二区三区| www日韩tube| 欧美午夜不卡| 香蕉视频国产在线| 51ⅴ精品国产91久久久久久| 国产视频在线免费观看| 中文字幕亚洲乱码熟女1区2区| 亚洲一区二区三区高清| 精品国产三区在线| 999精品在线视频| 欧美一区电影| 538精品视频| av成人综合网| 91传媒免费视频| 国产在线精品一区二区夜色| 青青操在线观看| 日本www在线观看| 在线看你懂得| 亚洲私人影吧| 最新电影电视剧在线观看免费观看| 国产视频中文字幕| 秘密影院久久综合亚洲综合| 国产精品理论片在线观看| 久久精品久久精品| 亚洲一区在线视频| 精品成人乱色一区二区| 蜜芽tv福利在线视频| 欧美性受xxxx黑人猛交88| 成人免费短视频| 欧美在线一区二区三区四区| 国产亚洲色婷婷久久| 欧美大片久久久| 国产亚洲精品久久| 国产69精品久久久久9999人| 91影院在线免费观看视频| 在线播放91灌醉迷j高跟美女| 欧美电影免费观看网站| 欧美国产激情| 永久www成人看片| 成人午夜在线视频| 日韩在线免费视频观看| 999精品久久久| 在线观看网站免费入口在线观看国内| 老司机午夜福利视频| 男人的天堂avav| 精品久久久久久久久久中文字幕| 亚洲在线视频观看| 九九九九九伊人| 国模杨依粉嫩蝴蝶150p| 一道精品视频一区二区三区男同| 不卡在线观看av| 国产剧情演绎av| 日本动漫理论片在线观看网站| 国产成人久久精品一区二区三区| 亚洲精品国产熟女久久久| 国产亚洲精品美女久久久久久久久久| 欧亚av在线| www激情久久| 国产美女久久久| 中文字幕在线网站| 欧美成人直播| 91日韩一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美精品一区二区成人| 国产91对白在线播放| 麻豆精品免费视频入口| 日韩成人综合| 美女av免费看| 日韩av电影网址| xx视频.9999.com| 一级片一级片一级片| 亚洲精品国产suv一区88| 免费在线毛片网站| 国产精品69毛片高清亚洲| 亚洲精品成人在线| 日韩精品一区二区亚洲av性色| 久久99精品一区二区三区| 亚洲欧美一区二区三区四区五区| 日韩美女一区| 91久久中文字幕| 欧美成人r级一区二区三区| 久久久久无码精品国产| 国产丰满果冻videossex| 91精品国产成人观看| 国产一区二区三区色淫影院| 少妇黄色一级片| 亚洲精品粉嫩美女一区| 国产视频九色蝌蚪| 国产欧美精品一区二区色综合| 精品国产三级电影在线观看| 免费看成年人视频| 四虎4hu永久免费入口| 香蕉视频在线网址| 欧美性受xxxx黑人xyx性爽| 激情久久一区| 亚洲一品av免费观看| va婷婷在线免费观看| 全国精品久久少妇| 亚洲精品ww久久久久久p站| 成人毛片视频在线观看| 中国在线观看免费国语版电影| 日韩精品影院| 免费在线欧美黄色| 日本24小时在线高清视频| 国产精品久久久久av蜜臀| 欧美日韩国产123| 中文字幕亚洲一区二区三区| 亚洲免费av在线| 蜜臀久久精品| 国产精品久久久久无码av| 午夜大尺度福利视频| 亚洲成人激情av| 欧美69xxxxx| 国产噜噜噜噜久久久久久久久| 中文字幕在线观看高清| 伊人在我在线看导航| 亚洲第一导航| 另类小说综合网| 午夜视频在线观看一区| 亚洲视频 欧洲视频| 91社影院在线观看| 香蕉视频免费在线| 媚黑女一区二区| 国产亚洲色婷婷久久99精品| 亚洲第一区中文99精品| 粉嫩av性色av蜜臀av网站| 不卡一二三区| 国产成人精品日本亚洲11| 欧美另类黑人巨大videos| 欧美在线观看视频| 亚洲成人精品在线播放| 91精品国产吴梦梦| 中文字幕色av一区二区三区| www.成人69.com| 夜夜躁狠狠躁日日躁2021日韩| 国产成人在线亚洲欧美| 午夜激情影院在线观看| 国产精品久久久久久久久久久久久久久久久| 亚洲午夜精品国产| www.色亚洲| 国产免费拔擦拔擦8x高清在线人| 一区二区三区观看| 欧美色欧美亚洲另类二区| 在线精品亚洲一区二区| 激情综合在线观看| 亚洲午夜精品久久久久久久久| 美女免费黄视频网站| 亚洲第一会所001| 亚洲欧洲国产综合| 一级黄色录像毛片| 久久99这里只有精品| 91成人在线观看喷潮| 国产一二三区在线视频| 久久99热精品这里久久精品| 亚洲美女精品视频| 免费成人蒂法网站| 亚洲免费av高清| 久久久久99精品一区| 国产精品美女久久久久久免费| 91精品国产色综合久久不卡粉嫩| 加勒比在线一区二区三区观看| 最爽无遮挡行房视频在线| 视频一区中文| 精品成在人线av无码免费看| 色噜噜色狠狠狠狠狠综合色一| 精品久久久久久久人人人人传媒| 欧美二区乱c黑人| 波多野结衣二区三区| 麻豆精品一区| 香港成人在线视频| 国产精品日韩无码| 日韩国产欧美精品一区二区三区| 一色桃子久久精品亚洲| 折磨小男生性器羞耻的故事| 亚洲一区二区三区四区av| 亚洲日本视频| 国产精品无码久久久久一区二区| 在线播放国产精品| 欧美日韩美女视频| 欧美艹逼视频| 91视频免费观看| 最近免费观看高清韩国日本大全| 国产毛片精品一区| 福利视频一区二区三区| 波多野在线播放| 日韩av懂色| 欧美日韩激情一区二区| 91在线视频免费看| 国产成人免费视频网站高清观看视频| 满满都是荷尔蒙韩剧在线观看| 欧洲三级视频| 亚洲精品性视频| 好男人社区在线视频| 在线视频不卡一区二区| 精品欧美一区二区在线观看视频| 成人在线免费观看一区| 国产精品第七十二页| 91精品久久久久久久91蜜桃| 国产精品nxnn| jizz18女人| 免费看黄色的网站| 香蕉久久一区| 上原亚衣av一区二区三区| 97最新国自产拍视频在线完整在线看| 亚洲色图丝袜| 伊人伊人av电影| 国产美女亚洲精品7777| 成人精品一区| 欧美大片一区二区三区| 日本女人一区二区三区| 久久综合久久久久| 成人香蕉社区| 你懂的国产视频| 26uuu另类亚洲欧美日本一| 亚洲免费精品| 国产精品日韩久久久久| h版电影在线播放视频网址| 久久资源免费视频| 爱福利在线视频| 国产精品久久久久永久免费看| 成人毛片在线| 亚洲小说欧美激情另类| 思热99re视热频这里只精品| 在线观看国产原创自拍视频| 午夜在线观看一区| 一区二区伦理片| 亚洲自拍偷拍福利| 久久精品国产亚洲av麻豆| 国产综合色一区二区三区| 国产精品一区二区三区高清在线| 精品欧美在线观看| 亚洲精品www久久久久久| 久久精品水蜜桃av综合天堂| 无码精品视频一区二区三区| 国产精品wwwww| 永久免费看片在线播放| 国产欧美久久久精品影院| 高清日韩av| 久久久久国产精品麻豆ai换脸| aaaaaa亚洲| 91伊人久久大香线蕉| 久久国产精品久久精品| 日韩中文字在线| 欧洲日本在线| 91小视频免费看| 色呦色呦色精品| 日本精品国产| 91麻豆精品国产91久久久久| 深爱激情综合| 日韩av片在线| 永久免费av无码网站性色av| 精品一区在线看| 中文欧美字幕免费| metart日本精品嫩模| 成人涩涩网站| 麻豆精品久久| 久久久久久91亚洲精品中文字幕| 亚洲国产成人久久综合| av在线亚洲一区| 久久国产精品久久久久久久久久| 性欧美freehd18| 国产视频视频一区| 亚洲国产一区二区三区在线播放| 成人免费观看在线网址| 日本成年免费网站| 欧美在线观看日本一区| 一本色道久久亚洲综合精品蜜桃| 一区2区3区在线看| 日韩一区二区视频在线| 国产精品久久久久久免费免熟| 国产精品免费一区二区三区都可以| 国产精品嫩草av| 亚洲一区二区不卡免费| av男人的天堂av| 精品一区二区三区中文字幕在线| 午夜精品久久久久久久久久蜜桃| 久久久久久久美女| 国产成人精品免费网站| 国产伦理精品不卡| 91国内精品| 日韩精品专区在线影院观看| 亚洲精品日产| 成人免费毛片嘿嘿连载视频…| 精品福利免费观看| 福利一区视频在线观看| 亚洲女女做受ⅹxx高潮| 日韩和欧美一区二区| 视频一区二区三区不卡| 免费的很黄很污的视频网站| 欧美一乱一性一交一视频| 91久久久一线二线三线品牌| 天堂√中文最新版在线| 97久久人国产精品婷婷| 91久久在线视频| 黄毛片在线观看| 国产综合精品一区二区三区| 先锋影音一区二区三区| 国产区在线看| 久久综合九色99| 久久动漫亚洲| 日韩电影中文 亚洲精品乱码| 中文字幕免费高清网站| 中文在线最新版天堂|