网络编程(四)
1. 掌握并发服务器
多路复用是假的并发(本质上是串行处理),多进程或多线程实现才叫并发
服务器创建子进程去处理用户业务
并发服务器:适用于用户请求需要长时间解决完的情境
注意:子进程只处理用户业务,所以关闭监听套接字
父进程只接受新的连接,所以关闭链接套接字
父进程还要回收子进程尸体
服务器创建子线程去处理用户业务
2.掌握套接字选项的获取或设置,比如下面两行,设置地址可重用
int on = 1;
setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
3.掌握可重入函数的基本概念
可重入函数:运行时被信号打断,信号处理函数执行完成,之后可以接着运行,可以保护现场恢复现场(相当于可中断)
不可重入函数:
数据链路层封装的目的MAC地址为全1
了解组播:
服务器封装数据报套接字地址结构,加入组播地址
客户端需要加入组播组
5.掌握INADDR_ANY :对应本机上的任一个IP地址
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(10000);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
void * 类属指针,传给void *不需要强转为void *类型
潜在bug:主线程,子线程不一定子线程先运行运行
主线程运行快了会覆盖一个connect_fd
多路复用是假的并发(本质上是串行处理),多进程或多线程实现才叫并发
服务器创建子进程去处理用户业务
并发服务器:适用于用户请求需要长时间解决完的情境
注意:子进程只处理用户业务,所以关闭监听套接字
父进程只接受新的连接,所以关闭链接套接字
父进程还要回收子进程尸体
服务器创建子线程去处理用户业务
2.掌握套接字选项的获取或设置,比如下面两行,设置地址可重用
int on = 1;
setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
3.掌握可重入函数的基本概念
可重入函数:运行时被信号打断,信号处理函数执行完成,之后可以接着运行,可以保护现场恢复现场(相当于可中断)
不可重入函数:
4. 广播跟单播的不同:
数据链路层封装的目的MAC地址为全1
了解组播:
服务器封装数据报套接字地址结构,加入组播地址
客户端需要加入组播组
5.掌握INADDR_ANY :对应本机上的任一个IP地址
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(10000);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
练习
1. 用线程实现并发服务器
void * 类属指针,传给void *不需要强转为void *类型
潜在bug:主线程,子线程不一定子线程先运行运行
主线程运行快了会覆盖一个connect_fd
2. 使用套接字选项,查询套接字的接收缓冲区有多大?