linux开发2-网络编程二之多路复用

操作函数

FD_CLR

将一个文件描述符从监听集合中移除。

void FD_CLR(int fd,fd_set *set);

FD_ISSET

判断一个文件描述符是否在监听集合中。

int FD_ISSET(int fd,fd_set *set);

返回值:1存在,0不存在。

FD_SET

将待监听的文件描述符,添加到监听集合中。

void FD_SET(int fd,fd_set *set);	//把前面的fd设置到后面的fd_set中,将fd对应的标志位设置为1

fd_set rdset;
FD_SET(fd,&rdset);		//把fd描述符放到检测集合reset中。

FD_ZERO

清空一个文件描述符集合。

void FD_ZERO(fd_set *set);	//将set集合中所有文件描述符对应的标志位设置为0,集合中没有添加任何文件描述符。
//例子
fd_set reset;
FD_ZERO(&reset);

select

int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *execptfds,struct timeval *timeout);

//例子
while(1)
{
	int num = select(maxfd+1,&retemp,NULL,NULL,NULL);
}
  • nfds:监控的文件描述符集里最大文件描述符+1,因为此参数会告诉内核检测前多少个文件描述符的状态。
  • readfds:监控有读数据文件描述符的集合,传入传出参数。
  • writefds:监控写数据到达文件描述符集合,传入传出参数。
  • execptfds:监控异常发生到达文件描述符集合,如带外数据到达异常,传入传出参数。
  • timeout:定时阻塞监控时间,3种情况:
  1. NULL,永远等待,阻塞监听。
  2. 设置timeval,等待固定时间
  3. 设置timeval里时间均为0,检查描述字后立即返回,轮询。

返回值:

  1. 大于0所有监听集合(3个)中,满足对应事件的总数。
  2. 0 没有满足监听条件的文件描述符。
  3. -1 错误error。

fd_set

它有1024个标志位。对应相应的文件描述符表。

poll

epoll

posted @   alvinlyb  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示