第十讲 高级网络编程
Linux高级编程系列演讲文档
高级网络编程
Linux高级编程系列演讲文档
超时socket 以alarm信号的方式中断阻塞函数 设置socket属性为SO_RCVTIMEO SO_SNDTIMEO 套接字API参数设置为MSG_DONTWAIT 设置socket为非阻塞 用select的最后一个参数控制socket的超时 超时返回时一般会把errno设置为EAGAIN
Linux高级编程系列演讲文档
recv/send的flags参数 read/write函数也可用于接收发送网络数据 recv/send的第四个参数flags增强了socket的 功能。 flags参数也同样存在于recvfrom、recvmsg、 sendto、sendmsg flags参数要么0,要么是各种flag或操作的集合。
Linux高级编程系列演讲文档
flags参数 MSG_DONTWAIT 调用socket函数时,把socket描述符转为非阻塞,返回时在设置成阻塞。如果此时socket中无数据或者发送缓冲区没有足够空间。接收或者发送函数 直接返回,errno会设置为EAGAIN
MSG_NOSIGNAL 当send函数操作被重置的面向链接的socket时,系统不产生 SIGPIPE,但是errno仍会被设置为 EPIPE MSG_OOB 发送或者接受out-of-band数据,又称带外数据或者紧急数据。 MSG_PEEK 从socket的接收队列的头部接受数据,但这些数据并不会从队列中移 除。因此后续的接收动作仍然都接收到这些数据。 MSG_WAITALL recv函数一直会被阻塞,直到请求被满足。但信号,socket被对端 重置仍能导致recv函数在未满足请求的情况下返回。
Linux高级编程系列演讲文档
Unix域套接字 Unix域协议并非真正的协议族 Unix域套接字用来在同一台主机上不同进程间通 讯。 Unix域套接字的API跟TCP/IP套接字API相同。 Unix域套接字支持流套接字和数据包套接字 Unix域套接字的速度比TCP/IP的快2倍左右 Unix域套接字用文件系统中的文件来标识
Linux高级编程系列演讲文档
无名unix域套接字#include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]);
创建两个全双工且已经链接的unix域套接字 domain跟socket函数的第一个参数类似,但必 须为FP_LOCAL protocol必须为0 type为SOCK_STREAM或SOCK_DGRAM 用于亲缘进程间通讯 全双工
Linux高级编程系列演讲文档
Unix域套接字#include <sys/socket.h> #include <sys/un.h> #define UNIX_PATH_MAX 108
struct sockaddr_un { sa_family_t sun_family; /* AF_LOCAL */ char sun_path[UNIX_PATH_MAX]; /* pathname */ };
地址结构为sockaddr_un,以sun_path作为标 识。 标识Unix域套接字的路径不能真实的存在于文件 系统中 socket domain为PF_LOCAL, address family 为AF_LOCAL
Linux高级编程系列演讲文档
Linux高级编程系列演讲文档
Unix域套接字 与unix域套接字绑定的文件不能在调用bind前存在 Unix域套接字的文件由bind函数创建,权限为0777 “减去” umask值 跟Unix域关联的路径必须是绝对路径,否则会引入不可知的问题。 调用connect时,参数中的路径已经有一个unix域套接字在其上打开。 路径名的权限决定了调用者是否有权限链接该unix域套接字。 Unix域
的流套接字和数据报套接字分别与TCP和UDP类似。Unix域 流套接字提供没有边界的字节流接口,数据报套接字提供基于记录接口。 两种类型的unix域套接字都是可靠的 当调用send和connect函数时,内核并不会绑定一个临时路径到 socket上。 调用close之后,域unix套接字关联的路径名并不会消失。 实例 un_server.c/un_client.c
Linux高级编程系列演讲文档
描述符操作函数fcntl#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg);
用来改变fd属性,操作描述符 cmd说明操作类型 F_GETFD 读取 close-on-exec,如果FD_CLOEXEC 是0,那么即使执行了exec,打开的描述符也会被保留。 F_SETFD 设置close-on-exec,值在arg中说明 F_DUPFD 跟dup函数类似,复制描述符fd,新描述符 必须 >= arg。新旧描述符共享文件锁,文件指针,但不 共享close-on-exec,新描述符的FD_CLOEXEC是0
Linux高级编程系列演讲文档
F_GETFL 读取描述符的属性,这个属性就是 open的第二个参数flag F_SETFL 设置描述符的属性,可以被动态改变的 属性有 O_APPEND,O_NONBLOCK,O_ASYNC,O_ DIRECT F_GETOWN 获取接收SIGIO和SIGURG信号 的进程ID或者进程组,进程组用复数表示 F_SETOWN 设置接收SIGIO和SIGURG信号 的进程ID或者进程组,进程组用复数表示
Linux高级编程系列演讲文档
TCP带外数据 带外数据又称加速数据 通信的一方发生紧急事件,并希望对方知道 带外数据的优先级高于普通数据 UDP没有带外数据 TCP有带外数据 带外数据可用来做心跳
Linux高级编程系列演讲文档
TCP带外数据实现
TCP带外数据传送时与普通数据共享同一条链接 带外数据只能有一个字节, send(fd,”a”,1,MSG_OOB) 带外数据放入TCP发送缓冲区的末尾 下一个TCP报文中,TCP头部标识位设置URG 时,表示TCP有紧急数据 同时设置TCP头中的紧急指针
Linux高级编程系列演讲文档
TCP带外数据实现 紧急数据并不一定随TCP紧急头部一起发送(设置 了URG位和紧急偏移) TCP 流量控制 接收端收到标有URG的TCP头部时,判断是否是 新的带外数据(网络会有重复报文) 有新的带外数据到达时,内核向socket的属主进 程发送SIGURG信号。 接收进程阻塞在select上时,会导致select返回。 通过MSG_OOB获取一个字节的紧急数据 TCP只维护一个紧急指针,后来的紧急数据会覆盖 之前的紧急数据。
Linux高级编程系列演讲文档
TCP带外数据实现 紧急数据默认情况下不会和普通数据混在一起 TCP专门维护一个字节的紧急数据缓冲 当接收端指明socket属性为SO_OOBINLINE 时,紧急数据不会冲接收缓冲中去除,而是和普通 数据放在一起 当遇到紧急数据时,recv函数就会返回,用 sockatmark来判断是否遇到紧急数据。 实例 oob_serv.c/oob_client.c
Linux高级编程系列演讲文档
epoll vs select select受到打开描述的限制
(FD_SETSIZE), 数目太少。多进程会有不小的开销 epoll支持的描述符数目继续没有限制, 有 /proc/sys/fs/fs-max可看到最大值。 select会扫描所有在集合中的描述符 epoll有内核来触发,只会对可读写的socket调 用回调函数。 epoll不会随着监听描述符的增加而降低效率 epoll有边缘触发(ET)和水平触发(LT)
…… 此处隐藏:1784字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




