Linux网络编程.pptVIP

  • 15
  • 0
  • 约7.15千字
  • 约 48页
  • 2017-02-15 发布于江苏
  • 举报
网络高级编程 在实际情况中,人们往往遇到多个客户端连接服务器端的情况。由于之前介绍的如connet()、recv()和send()等都是阻塞性函数,如果资源没有准备好,则调用该函数的进程将进入睡眠状态,这样就无法处理I/O多路复用的情况了。 本节给出了两种解决I/O多路复用的解决方法,这两个函数都是之前学过的fcntl()和select() 。 fcntl() 函数fcntl()针对socket编程提供了如下的编程特性。 ? 非阻塞I/O:可将cmd设置为F_SETFL,将lock设置为O_NONBLOCK。 异步I/O:可将cmd设置为F_SETFL,将lock设置为O_ASYNC。 示例 阅读并运行示例10-3-1。 select() 使用fcntl()函数虽然可以实现非阻塞I/O或信号驱动I/O,但在实际使用时往往会对资源是否准备完毕进行循环测试,这样就大大增加了不必要的CPU资源的占用。在这里可以使用select()函数来解决这个问题,同时,使用select()函数还可以设置等待的时间,可以说功能更加强大。 示例 阅读并运行10-3-2。 10.4 ping源码分析 ping简介(1) ping是网络中应用非常广泛的一个软件,它是基于ICMP协议的。下面首先对ICMP协议做一些简单介绍。 ICMP是IP层的一个协议,它是用来探测主机、

文档评论(0)

1亿VIP精品文档

相关文档