前面几节文章大概介绍了网络编程的第一部分:网络基础上、下、TCP编程、并发服务器、UDP编程。
接下来到了网络编程第二部分:IO模型和多路复用模型、网络分析测试工具、封包、IP和TCP头,TCP握手过程、网络信息检索、网络属性设置、超时检测,我们今天先开始"IO模型和多路复用模型",知识都会娓娓道来,敬请关注!
1.2:非阻塞IO:可防止进程阻塞在I/O操作上,需要轮询
1.3:I/O多路复用:允许同时对多个I/O进行控制
上面这张截图可以了解到,读操作、写操作、其它操作都有对应的函数会发生阻塞现象,其中还有另外一个函数不会发生阻塞,就算UDP编程里的"sento"函数,这个函数是不会发生阻塞的。
2.读阻塞
EWOULDBLOC:表示错误,返回一个错误值,是"should Block"的过去式
上面介绍了不同的阻塞模型,先在脑海中有个认识,下面重点介绍下多路复用I/O
实现步骤:
1:把关心的文件描述符加入到集合中(fd_set);
2:调用select()/poll()函数去监控集合"fd_set"中哪些文件描述符(阻塞等待集合中一个或多个文件描述符有数据)
3:当有数据时退出select()阻塞
4:依次判断哪个文件描述符有数据
5:依次处理有数据的文件描述符上的数据