6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数

时间:2022-10-31 11:01:33
1.什么情况下使用IO复用
	1.客户端处理多个描述符;
	2.客户端处理多个套接字;
	3.TCP服务器既要处理监听套接字,又要处理连接套接字;
	4.一个服务器既要处理TCP,又要处理UDP;
	5.一个服务器要处理多个服务或者多个协议;

2.I/O模型
	阻塞式IO(默认情况下,所有套接字都为阻塞的);
	非阻塞式IO(当所有IO请求操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,轮询);
	IO复用(阻塞在select,poll的某一个只上,而不是阻塞在真正的IO系统调用之上,需要2个系统调用);
	信号驱动IO(通过sigaction安装一个信号处理函数,主循环继续,数据准备好时,内核为该进程产生一个SIGIO信号,自己在信号处理函数中复制数据);
	异步IO(告诉内核启动某个操作,并在内核在整个操作完成之后通知我们。
		  与信号驱动IO的区别在于,信号驱动IO是由内核告知我们何时启动一个IO操作。
		  而异步IO是由内核通知我们IO操作何时完成,即信号在数据被复制到应用缓冲区时产生);

3.描述符准备就绪的条件
	一个套接字准备好读:
		1.该套接字接收缓冲区的数据字节大于套接字接收缓冲区低水位;
		2.该连接的读半部关闭,对这样的套接字的读操作不阻塞返回0;
		3.该套接字是一个监听套接字且已经完成的连接数不为0;
		4.其上有一个套接字错误待处理;

	一个套接字准备好写:
		1.该套接字发送缓冲区中可用空间大于套接字发送缓冲区低水位;
		2.该连接写半部关闭;
		3.使用非阻塞connect的套接字已经建立连接,或者connect已失败告终;
		4.该套接字有错误待处理;


4.shutdown 与 close 区别
	1.close 只是把计数器 -1,直到0时才真正关闭;
	2.close 终止两个方向上的数据传送,shutdown 可以只终止一个方向;


5.避免拒绝服务型攻击
  当服务器处理多个客户时,它绝对不能阻塞于只与某个单个客户相关的函数调用。
  1.使用非阻塞IO;
  2.让每个客户由单独的控制线程提供服务;
  3.对IO操作设置一个超时;
	


1.概述

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


2.I/O模型

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


3.select 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


4.str_cli 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


5.批量输入

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


6.shutdown 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


7.str_cli 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


8. TCP 回射服务器程序

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


9.pselect 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


10.poll 函数

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数


11.TCP 回射服务器程序

6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数