- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络上拦截下来的数据 TCP/IP四层调用关系 其中, (1)sa_family可以取下列值之一: AF_UNIX Unix域协议簇(本机的进程间通信时使用) AF_INET TCP/IP协议簇(Internet采用TCP/IP协议簇) AF_ISO ISO协议簇 注:AF_ 代表“address family”。 (2)sa_data根据不同的地址类型(即sa_family的不同取值)来解释,常见的地址类型是AF_INET。 对于使用最多的AF_INET地址类型,其协议地址主要包括两大部分:IP地址、端口号,它的地址结构在netinet/in.h中定义。 对于地址类型为AF_INET的协议地址,其定义如下: struct sockaddr_in { short int sin_family; /* Address family */ unsigned short int sin_port; /* Port number */ /* 16-bit port number ,网络字节顺序*/ struct in_addr sin_addr; /* Internet address */ /* 32位IP地址(网络号+主机号),网络字节顺序*/ unsigned char sin_zero[ 8]; /* 填充0,以保持与通用套接字地址(struct sockaddr) 同样大小*/ }; 其中,struct in_addr { unsigned long s_addr; /*32位IP地址(网络号+主机号),网络字节顺序*/ } 这两个数据结构类型(struct sockaddr和struct sockaddr_in )是等效的,可以相互转换,通常使用sockaddr_in更为方便。 小结:面向连接的数据流通信过程 由于在前面介绍的函数如connect、recv、send等都是阻塞性函数,若资源没有准备好,则调用该函数的进程将进入阻塞状态,这样无法实现I/O多路复用了,下面介绍两种I/O多路复用的解决方案。 1、fcntl函数实现(非阻塞方式) 通过设置socket为非阻塞方式,可以实现“轮询”若干socket。但这种“轮询”会使CPU处于忙等待方式,从而降低性能,浪费资源。 2、select函数实现 select调用 select()应用于多路同步I/O模式,实现非阻塞的同步I/O int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); select()函数允许程序同时对多个文件描述符进行监视。 numfds是为要监视的3个文件描述符集中最大文件描述符的数值加上1。 其中readfds, writefds和exceptfds为要监视的读、写和异常条件的文件描述符集合。 timeout是select的时间限制 返回值:当select()函数发现有文件描述符准备好之后,将返回准备好的文件描述符的数量。这时,并不知道哪个文件描述符集合中哪个文件描述符已经准备好了,FD_ISSET()将获得准备好的文件描述符信息。 socket集合(即文件描述符集合) 集合变量类型:fd_set 集合变量运算宏: FD_ZERO(fd_set *set): 清空一个文件描述符集; FD_SET(int fd, fd_set *set) 将一个文件描述符加入一个文件描述 符集中; FD_CLR(int fd, fd_set *set) 将一个文件描述符从文件描述符集 中清除; FD_ISSET(int fd, fd_set *set) 判断fd是否是set集合中的一员; Select应用举例 fd_set r
您可能关注的文档
最近下载
- 《懂得爱:在亲密关系中成长》读书笔记.docx VIP
- 上海市中考语文专题复习:文言文虚词简表.pdf VIP
- 广西盐业公司的招聘试卷.pdf VIP
- 2025《民营经济促进法》解读课件PPT.pptx
- Haier海尔空调KFRd-120LW 7YAF81 KFRd-120LW 5YAF82 KFR-12ity 5YAF82用户手册.pdf
- 雪铁龙维修 手册 图DS_5LS_Owner_Book_ZH.pdf VIP
- 烟风煤支吊架设计手册-新版.pdf VIP
- 长期卧床鼻饲患者的护理ppt.pptx VIP
- 教学能力大赛教案--智慧工厂的安全策略之VLAN的划分.docx VIP
- GB 6246-2011 消防水带标准规范‘’.pdf
文档评论(0)