FD_CLR什么情况下用?
15 个解决方案
#1
我当然知道FD_CLR 是从集合内清除某个描述符的,但不是问的这个啊。
#2
楼主真的不懂?
增删改查初始化, 效率能一样吗?
clear了然后设置1万个,只为了取消那1个? 脑残?
增删改查初始化, 效率能一样吗?
clear了然后设置1万个,只为了取消那1个? 脑残?
#3
请看懂我问的是什么在回答好吗,select返回后会把以前加入的但并无事件发生的fd清空,FD_CLR只清掉集合中的一个描述符,除非所有fd都发生事件而没有被清空,这样后面用FD_CLR才有意义。否则,都要FD_ZERO然后FD_SET再逐个设置一遍。
所以我问是不是用到FD_CLR的情况不多,只有集合内所有fd都发生事了,才有可能用到?
#4
难道你不知道一份fdset是长久保存的,一份是复制前面那个fdset然后加入select的?
你操作的只是前面那一份,不懂?
你操作的只是前面那一份,不懂?
#6
第一次听说还有长久保存的一份,请给个这方面的资料链接看看,学习一下,谢谢
#7
你看CU论坛里那位同学发的select.tar.gz,里面可以看到相关代码。
#8
linux_c_py_php 是CSDN的大版主啊
#9
水水就成版主了, 毫无意义.
#10
啊,明白了是用户自己备份了一份,以后只是赋值就行了,多谢提醒~
#11
版主谦虚了~,以后多向你学习
#12
就是一份fdset是一直保持着的,每次select之前拷贝一份给select用,这样删除添加事件都是操作前面那个fdset,后面的select完用完拉倒。
#13
是啊,明白了,谢谢~
#14
但是还有个问题,这样select的第一个参数每次都要重新判断一下啊
#15
#define CONN_MAXFD FD_SETSIZE
stat=select(CONN_MAXFD+1,&rf,&wf,&ef,&tm);
int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);
参数maxfd是需要监视的最大的文件描述符值+1,那个select代码里怎么是 FD_SETSIZE+1,FD_SETSIZE 一定不是用户的最大描述符的值吧?
stat=select(CONN_MAXFD+1,&rf,&wf,&ef,&tm);
int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);
参数maxfd是需要监视的最大的文件描述符值+1,那个select代码里怎么是 FD_SETSIZE+1,FD_SETSIZE 一定不是用户的最大描述符的值吧?
#1
我当然知道FD_CLR 是从集合内清除某个描述符的,但不是问的这个啊。
#2
楼主真的不懂?
增删改查初始化, 效率能一样吗?
clear了然后设置1万个,只为了取消那1个? 脑残?
增删改查初始化, 效率能一样吗?
clear了然后设置1万个,只为了取消那1个? 脑残?
#3
请看懂我问的是什么在回答好吗,select返回后会把以前加入的但并无事件发生的fd清空,FD_CLR只清掉集合中的一个描述符,除非所有fd都发生事件而没有被清空,这样后面用FD_CLR才有意义。否则,都要FD_ZERO然后FD_SET再逐个设置一遍。
所以我问是不是用到FD_CLR的情况不多,只有集合内所有fd都发生事了,才有可能用到?
#4
难道你不知道一份fdset是长久保存的,一份是复制前面那个fdset然后加入select的?
你操作的只是前面那一份,不懂?
你操作的只是前面那一份,不懂?
#5
#6
第一次听说还有长久保存的一份,请给个这方面的资料链接看看,学习一下,谢谢
#7
你看CU论坛里那位同学发的select.tar.gz,里面可以看到相关代码。
#8
linux_c_py_php 是CSDN的大版主啊
#9
水水就成版主了, 毫无意义.
#10
啊,明白了是用户自己备份了一份,以后只是赋值就行了,多谢提醒~
#11
版主谦虚了~,以后多向你学习
#12
就是一份fdset是一直保持着的,每次select之前拷贝一份给select用,这样删除添加事件都是操作前面那个fdset,后面的select完用完拉倒。
#13
是啊,明白了,谢谢~
#14
但是还有个问题,这样select的第一个参数每次都要重新判断一下啊
#15
#define CONN_MAXFD FD_SETSIZE
stat=select(CONN_MAXFD+1,&rf,&wf,&ef,&tm);
int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);
参数maxfd是需要监视的最大的文件描述符值+1,那个select代码里怎么是 FD_SETSIZE+1,FD_SETSIZE 一定不是用户的最大描述符的值吧?
stat=select(CONN_MAXFD+1,&rf,&wf,&ef,&tm);
int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);
参数maxfd是需要监视的最大的文件描述符值+1,那个select代码里怎么是 FD_SETSIZE+1,FD_SETSIZE 一定不是用户的最大描述符的值吧?