select函数的使用
来源:互联网 发布:python能做成包吗 编辑:程序博客网 时间:2024/06/06 01:22
I/O 多路复用
阻塞函数在完成其指定的任务以前不允许程序继续向下执行。如:当服务器运行到accept语句时而没有客户端请求连接,服务器就会停止在accept语句上等待连接请求的到来,这种情况称为堵塞,而非堵塞操作则可以立即完成。如:如果你希望服务器仅仅检查是否有客户在等待连接,有就接受连接,否则就继续做其他的事情,则可以通过使用select系统调用来实现,除此之外,select还可以同时监听多个程序。
又以上我们可以知道,并发式服务器除了利用线程、进程实现, 还可以调用select实现。
一般来说,如果当连接的客户端很多时,服务器的主线程会创建相应多的子线程去和客户端进行交互,这时,当某一个客户端发来信息、或者没有发信息时,服务器会不停的去切换线程去判断是否发没发消息,这很浪费CPU资源,容易造成额外的开销。
setsockopt()
函数作用:可以重复绑定地址
函数原型:int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
如:setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
opt = 1;
select()
函数原型:int select(int maxfd, fd_set * readfds, fe_set *writefds, fe_set *exceptfds, const struct timeval *timeout)
函数各参数作用:
Maxfd: 文件描述符的范围,比待检的最大文件描述符大1
Readfds:被读监控的文件描述符集
Writefds:被写监控的文件描述符集
Exceptfds:被异常监控的文件描述符集
Timeout:定时器
系统提供了4个宏读描述符集进行操作:
#include <sys/select.h>
Void FD_SET(int fd, fd_set *fdset)
Void FD_CLR(int fd, fd_set *fdset)
Void FD_ZERO(fd_set *fdset)
Void FD_ISSET(int fd, fd_set *fdset)
宏FD_SET将文件描述符fd添加到文件描述符集fdset中
宏FD_CLR从文件描述符集fdset中清除文件描述符fd
宏FD_ZERO清空文件描述集fdset
在调用select后使用FD_ISSET来检测文件描述符集fdset中的文件fd发生了变化
- select函数的使用
- select函数的使用
- select函数的使用
- select函数的使用
- 关于select函数的使用
- select函数的使用举例
- select函数的简单使用
- Linux C的select函数的使用
- Linux中select函数的使用 select() Linux linux函数 select
- socket中select函数的使用
- Linux下select函数的使用
- Linux下select函数的使用
- Iinux中select函数的使用
- Linux下select函数的使用
- linux下select函数的使用
- Linux下select函数的使用
- socket中select函数的使用
- select 和 pselect 函数使用的分析
- I/O多路转接
- UVA 12124 Assemble (二分 + 字典树)
- JavaScript函数小结
- 配置java环境变量和maven环境变量
- Hadoop报错
- select函数的使用
- c++设计模式之工厂方法模式
- iOS 封装WKWebView页面带加载进度条
- 统计图分析(源自Echars图形)——饼图
- C#中如何加载dll并调用其函数
- BIJI
- 嵌入式linux自动更新网络时间NTP移植
- 摄像头驱动3_虚拟驱动vivi彻底分析
- free 命令详解