- 论坛徽章:
- 7
|
FD_ZERO(&set); --清空set
FD_SET(s, &set); --将fd s,加入到set中
select(0,&set,NULL,NULL,NULL); --监视set中是否有活跃的fd, select应该写成select(0 +1, ................)
--select成功返回后,检查下s是不是活跃的,当然,在lz的代码里面,set只有一个fd s,所以s一定是活跃的,因此fd_isset这步可以省略。但如果set含有多个fd,那么select成功返回的值活跃的fd的数目,所以还要对fd s做下fd_isset的判断,判断其是不是活跃的。
或许楼主不明白了,fd_isset不是判断fd在不在集合中吗,怎么是用来检测是不是活跃的? 看一下select的说明,select的第二、三、四个都是值-结果集参数,就是说传进去的set,在select成功返回后,会把set中的不活跃的fd给fd_clr(fd, &set)了。但是活跃就保持不变,或者说fd_set(fd, &set)。
if(FD_ISSET(s, &set)
{
recv(s,...);
} |
|