- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九讲高级socket编程.ppt
网络化编程 第九讲 高级socket编程 内容提要 高级IO函数 Nonblocking IO 信号驱动IO Unix domain socket Raw socket 高级IO函数 read/recv/readv/recvmsg write/send/writev/sendmsg recvmsg/sendmsg最为通用,可以替代所有的其它函数 read/write最简单,并且不限于socket recv/send 函数 常见的 flags MSG_DONTWAIT 标志 MSG_PEEK 标志 MSG_WAITALL 标志 readv/writev 函数 readv/writev 函数 readv/writev 函数 Nonblocking IO By default, sockets are blocking blocking socket 操作 输入 read, readv, recv, recvfrom, and recvmsg 输出 write, writev, send, sendto, and sendmsg 接受连接请求 accept 连接请求 connect Blocking read vs. nonblocking read Blocking read TCP, 如果没有数据,阻塞;如果哪怕有一个Byte的数据,可以返回,除非设置了MSG_WAITALL标志 UDP,如果没有报文到达,阻塞;有一个报文到达,返回 Nonblocking read 如果有数据,返回;否则,立即返回,指示错误EWOULDBLOCK Blocking write vs. nonblocking write Blocking write TCP,写操作相当于将应用程序的数据拷贝到内核的socket send缓冲区。 如果send缓冲满,操作阻塞; 否则,返回实际拷贝的数据长度(可能比预期的短) UDP,不会阻塞 Nonblocking write TCP,如果send缓冲区满,立即返回,指示错误EWOULDBLOCK Accept: Blocking vs. nonblocking accept 就是应用程序从内核的连接队列中取出一个ESTABLISHED连接【回忆】 Blocking accept 如果有ESTABLISHED连接,返回之;否则,阻塞 Nonblocking accept 如果没有,立即返回,指示错误EWOULDBLOCK listening socket的两个队列 Connect: Blocking vs. nonblocking connect 的任务是完成三次握手 Blocking connect 如果三次握手没有完成,阻塞等待完成 否则返回 Nonblocking connect 如果三次握手没有完成,立即返回,指示错误EINPROGRESS Connection Establishment A 和 B 对初始序列号进行协商 采用三次握手 Socket Timeouts 采用alarm 采用信号 IO多路复用 select 可以管理多个file descriptor 可以精确到微秒 SO_RCVTIMEO 和 SO_SNDTIMEO socket 选项 新的选项,仅限于socket 可以精确到微秒 alarm例子 参见 unpv103e/lib/connect_timeo.c 要点: SIGALRM句柄的设置与恢复信号 alarm的设置与恢复 Nonblocking read/write Echo client例子 采用select多路复用机制 见 unpv103e/nonblock/strclinonb.c 比较完整,综合考虑读、写阻塞 考虑框架 + 逻辑(Logic) 缓冲区管理 Nonblocking connect 三次握手时间 一个connect 需要花费一个 RTT 的时间 RTT时间可能在几ms(LAN)到几百ms 甚至几秒(WAN)之间 Server busy 采用nonblocking connect,多个连接建立过程可以同时进行. 这在 Web browsers中非常常见. 采用 select 等待连接建立, 设置时间限制, 减少等待时间 通常connect的超时从 75 秒到几分钟. 如果不想等那么长时间,那就有必要采用nonblocking Nonblocking connect 代码 见 unpv103e/lib/connect_nonb.c 框架要点: 设置NONBLOCKING 尝试 connect 设置 select 参数,select 监听 同时监视socket的可读、可写状态 成功 or 超时? Nonblocking connect - Web cl
文档评论(0)