1. 端口复用设置
作用 : 解决address already is use 报错 的问题 ( 端口被占用, 可能没被释放 )
使用 : 放在socket 的 bind 前面;
int opt_val = 1;
//端口复用设置 socketfd1 网络连接标识符
setsockopt(socketfd1, SOL_SOCKET, SO_REUSEADDR, (const void*)&opt_val, sizeof(opt_val));
2. socket IO复用
复用一般有三种技术
1. select
不记录发出 I/O 者的描述符, 因此只能无差别轮询所有流,找出能读出数据,或者写入数据的流,采用的是数组存储;
2. poll
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的。
3. epoll ( 下面介绍的函数就是epoll技术 )
应用场景
select的timeout参数精度为1nm,比poll和epoll的1ms精度更高,因此select适合实时性要求比较高的场景。select的可移植性非常的好。
poll没有最大描述符数量的限制,如