一.select的引入
多进程的问题:数据共享,进程的上下文环境(context),文件描述符号是整数以及对应的上下文环境。
多进程中上下文环境无法共享。
二.select tcp服务器编程模式
1.select函数
int select(
int fds,//建议是监控的文件描述符号的最大值+1.
fd_set readfds,//读文件描述符号集合该参数既是输入也是输出输入被监控的描述符,输出:发生改变(有数据)的描述符
fd_set *writefds,
fd_set *errfds,
struct timeval*timeout);//指定阻塞时间限制为NULL表示永久
返回:
>0:发生改变的文件描述符号个数
=0:时间限制过期
=-1:异常
2.select通过异步方式来工作,异步通过信号来触发。
3.应用select
4.poll
int poll(
struct pollfd*fds,//监控的描述符号
int nfds;//监控的描述符号的个数
int timeout);//阻塞超时
三.socket选项设置
1.soket通用选项:
SOL_SOCKET-SO_BROADCAST 广播
SO_RCVBUF 描述符号的缓冲的大小
SO_SNDBUF 描述符号的缓冲的大小
SO_REUSEADDR 地址反复绑定
SO_TYPE 描述符号类型SOCK
ICMP选项:
IPPROTO_ICMP
ICMP_FILTER
IP选项(控制生成的IP头)
IPPROTO_IP
UDP选项
IPPROTO_UDP
TCP选项
IPPROTO_TCP
setsockopt设置选项
getsockopt获取选项
三.OOB数据(TCP)
优先数据
send(,MSG_OOB)
recv(,MSG_OOB)
1.OOB数据只能是一个字符
2.普通数据使用一般方式接收与发送,OOB数据使用MSG_OOB接收与发送
3.一个数据使用MSG_OOB,则最后一个是OOB,其它的是非OOB
4.OOB是优先数据,靠信号触发体现优先级。
四.HTTP协议以及应用
1.HTTP协议版本HTTP1.0 HTTP1.1
2.HTTP是应用协议(应用级协议)
3.HTTP协议分成:
请求协议
响应协议
4.表示协议的格式
请求行(请求方法 请求资源 协议版本)
请求体(请求头:请求值)
空行
数据 (querystring:key=value&key=value)
5.响应格式
响应行(协议版本 响应码响应码的文本描述)
响应体(响应头:响应值)
空行
数据(普通数据/分块数据)
响应码:1XX表示正在处理,2XX表示响应成功,3XX表示继续处理,4XX客户错误,5XX服务器错误