




免费预览已结束,剩余30页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Unix网络编程,第九讲高级socket编程,内容提要,高级IO函数NonblockingIO信号驱动IOUnixdomainsocket,高级IO函数,read/recv/readv/recvmsgwrite/send/writev/sendmsgrecvmsg/sendmsg最为通用,可以替代所有的其它函数read/write最简单,并且不限于socket,recv/send函数,#includessize_trecv(intsockfd,void*buff,size_tnbytes,intflags);ssize_tsend(intsockfd,constvoid*buff,size_tnbytes,intflags);Bothreturn:numberofbytesreadorwrittenifOK,1onerror,常见的flags,MSG_DONTWAIT标志,对一个单独的I/O操作设定nonblocking模式,不必针对整个socket该I/O操作结束后,自动关闭nonblocking模式,MSG_PEEK标志,允许程序检查有多少数据可读不同于recv/recvfrom的是,数据仍然存放在socket缓冲区内,MSG_WAITALL标志,指示内核只有当指定数目的字节读取完毕,read才能够返回如果系统支持该标志,那么readn函数可以采用下面的宏代替:#definereadn(fd,ptr,n)recv(fd,ptr,n,MSG_WAITALL)即便指定了MSG_WAITALL,read仍然可能返回少于指定数目的数据:asignaliscaughttheconnectionisterminatedanerrorispendingforthesocket.,readv/writev函数,#includessize_treadv(intfiledes,conststructiovec*iov,intiovcnt);ssize_twritev(intfiledes,conststructiovec*iov,intiovcnt);Bothreturn:numberofbytesreadorwritten,1onerror,readv/writev函数,通用,不限于socket类似于read/write,但readv/writev允许一次调用读/写多个缓冲区这些操作习惯被称为scatterread(因为input被分散到多个应用程序缓冲区)和gatherwrite(因为多个缓冲区数据被收集到一个输出操作).,readv/writev函数,iovisapointertoanarrayofiovecstructuresIOV_MAX定义最大数组长度限制,#includessize_treadv(intfiledes,conststructiovec*iov,intiovcnt);ssize_twritev(intfiledes,conststructiovec*iov,intiovcnt);Bothreturn:numberofbytesreadorwritten,1onerror,structiovec,structiovecvoid*iov_base;/*addressofbuffer*/size_tiov_len;/*sizeofbuffer*/;,NonblockingIO,Bydefault,socketsareblockingblockingsocket操作输入read,readv,recv,recvfrom,andrecvmsg输出write,writev,send,sendto,andsendmsg接受连接请求accept连接请求connect,BlockingI/OModel,Blockingreadvs.nonblockingread,BlockingreadTCP,如果没有数据,阻塞;如果哪怕有一个Byte的数据,可以返回,除非设置了MSG_WAITALL标志UDP,如果没有报文到达,阻塞;有一个报文到达,返回Nonblockingread如果有数据,返回;否则,立即返回,指示错误EWOULDBLOCK,Blockingwritevs.nonblockingwrite,BlockingwriteTCP,写操作相当于将应用程序的数据拷贝到内核的socketsend缓冲区。如果send缓冲满,操作阻塞;否则,返回实际拷贝的数据长度(可能比预期的短)UDP,不会阻塞NonblockingwriteTCP,如果send缓冲区满,立即返回,指示错误EWOULDBLOCK,Accept:Blockingvs.nonblocking,accept就是应用程序从内核的连接队列中取出一个ESTABLISHED连接【回忆】Blockingaccept如果有ESTABLISHED连接,返回之;否则,阻塞Nonblockingaccept如果没有,立即返回,指示错误EWOULDBLOCK,listeningsocket的两个队列,Connect:Blockingvs.nonblocking,connect的任务是完成三次握手Blockingconnect如果三次握手没有完成,阻塞等待完成否则返回Nonblockingconnect如果三次握手没有完成,立即返回,指示错误EINPROGRESS,ConnectionEstablishment,A和B对初始序列号进行协商采用三次握手,A,B,SYN+SeqA,SYN+ACK-A+SeqB,ACK-B,SocketTimeouts,采用alarm采用信号IO多路复用select可以管理多个filedescriptor可以精确到微秒SO_RCVTIMEO和SO_SNDTIMEOsocket选项新的选项,并且仅限于socket,alarm例子,参见unpv103e/lib/connect_timeo.c,Nonblockingread/write,STDIN,STDOUT,TCPSOCKET,Echoclient例子,见unpv103e/nonblock/strclinonb.c,缓冲区管理,Nonblockingconnect,其它处理和三次握手并发进行一个connect需要花费一个RTT的时间一个RTT时间可能在几ms(LAN)到几百ms甚至几秒(WAN)之间采用nonblockingconnect,多个连接建立过程可以同时进行.这在Webbrowsers中非常常见.采用select来等待连接建立,select可设置时间限制,减少等待connect超时的时间通常connect的超时从75秒到几分钟.如果不想等那么长时间,那就有必要采用nonblocking,Nonblockingconnect代码,见unpv103e/lib/connect_nonb.c,NonblockingconnectWebclient,见unpv103e/nonblock/web.cweb.hhome_page.cstart_connect.cwrite_get_cmd.c,信号驱动IO,SIGIORTSignal,SIGIO信号的发生条件,SIGIOwithUDPSocketssocket上有一个数据报文到达Socket上发生一个异步错误SIGIOwithTCPSockets在监听socket上有一个连接请求完成连接拆卸请求启动连接拆卸请求完成半连接关闭shutdownSocket上有数据到达Socket上有数据发送(i.e.,输出缓冲区有空间)有异步错误发生,RTsignal实时信号,WhyRTsignal?信号驱动I/O处理多个连接时有些问题,程序无法知道是哪个socket有事件到达.POSIX实时信号(RTsignals)比较SIGIO做了重大改进首先,允许一个信号和一个描述符关联其次,信号在内核排队,实现事件驱动的机制但是,这个队列可能溢出,这时可能还需要SIGIO.,UnixDomainsocket,一种IPC机制,只能用于本机的进程之间通信.两种类型:Stream、Datagram可以用于进程之间传递文件描述符,UnixDomainsocket,#include#includeunix_socket=socket(PF_UNIX,type,0);error=socketpair(PF_UNIX,type,0,int*sv);,UnixDomainAddress
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信阳航空考试题目及答案
- 三甲医院住院医师规范化培训全科师资培训考试题及答案
- 2025年航天质量知识试题及答案
- 维修电工考级考证试题题库及答案
- 2025年风机检修培训试题及答案
- 安全用电考试题及答案
- smt基础知识考试试题及答案
- 跨国企业劳动合同制定与海外员工权益保障合同
- 高新技术研发项目资金拨付合同
- 2025公务员省考面试题及答案
- 2025十堰张湾区城市社区党组织书记专项招聘事业编制人员考试笔试试卷【附答案】
- 2025年国防教育知识竞赛试题(附答案)
- 2025国庆节前安全教育培训
- 国歌课件教学课件
- 增补合同协议模板
- 玉盘二部合唱简谱
- 铁路路基大维修规则
- 四年级上册数学 线段、直线、射线、角(同步练习)人教版 (无答案)
- 当前银担合作中存在的问题及对策研究
- 古城的保护与更新——平江历史街区讲义
- 小学道法小学道法六年级上-5.国家机构有哪些(第二课时-国家机关的职权)ppt课件
评论
0/150
提交评论