IO函数recvmsg与sendmsg.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IO函数recvmsg与sendmsg

I/O函数recvmsg与sendmsg??想对于之前的几个IO函数,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.?这2个函数只用于套接口,不能用于普通的I/O读写,参数sockfd则是指明要读写的套接口。flags用于传入控制信息,一般包括以下几个MSG_DONTROUTE???????????? send可用MSG_DONWAIT???????????????? send与recv都可用MSG_PEEK??????????????????????? recv可用MSG_WAITALL?????????????????? recv可用MSG_OOB???????????????????????? send可用MSG_EOR????????????????????????? send recv可用?返回信息都记录在struct msghdr * msg中。struct msghdr {?????? void * msg_name;//协议地址和套接口信息,在非连接的UDP中,发送者要指定对方地址端口,接受方用于的到数据来源,如果不需要的话可以设置为NULL(在TCP或者连接的UDP中,一般设置为NULL)。??????? socklen_t msg_namelen;//上面的长度??????? struct lovec * msg_lov;??????? ssize_t msg_lovlen;//和readv和writev一样??????? void * msg_control;??????? socklen_t msg_controllen;??????? int msg_flags; //用于返回之前flags的控制信息}?样例1,在TCP中使用 sendmsg与recvmsg?服务器......#define MAXSIZE 100int main(int argc, char ** argu) {??????? .......??????? struct msghdr msg;//初始化struct msghdr??????? msg.msg_name = NULL; //在tcp中,可以设置为NULL??????? struct iovec io;//初始化返回数据??????? io.iov_base = buf; //只用了一个缓冲区??????? io.iov_len = MAXSIZE; //定义返回数据长度??????? msg.msg_iov = io;??????? msg.msg_iovlen = 1;//只用了一个缓冲区,所以长度为1??????? ...................??????? ssize_t recv_size = recvmsg(connfd, msg, 0);??????? char * temp = msg.msg_iov[0].iov_base;//获取得到的数据??????? temp[recv_size] = \0;//为数据末尾添加结束符??????? printf(get message:%s, temp);??????? ..........................}?客户端..................#define MAXSIZE 100int main(int argc, char ** argv) {??????? .................??????? struct msghdr msg;//初始化发送信息??????? msg.msg_name = NULL;??????? struct iovec io;??????? io.iov_base = send_buff;??????? io.iov_len = sizeof(send_buff);??????? msg.msg_iov = io;??????? msg.msg_iovlen = 1;??????? if(argc != 2) {??????????????? printf(please input port);??????????????? exit(1);??????? }??????? ............??????? ssize_t size = sendmsg(sockfd, msg, 0);??

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档