select函数使用时应注意的问题
来源:互联网 发布:javascript注释 编辑:程序博客网 时间:2024/06/05 07:50
问题一:fd_set和timeval的重置。
select函数的使用一般分为以下几步
1、FD_ZERO(fd_set*);
2、FD_SET(int fd,fd_set*);
3、int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
4、FD_ISSET(int fd, fd_set *set);
仔细观察以上函数会发现,fd_set参数和timeval参数传递的全是其变量指针。然而,经过实验四个函数均会通过指针对fd_set和timeval的最初值进行更改,因此,在每次调用select函数之前必须对fd_set和timeval进行重置,使二者保持正确的初始值。
问题二:select函数中第一参数(int n)的设置。
该参数代表的是select函数监听描述字集的最大值即最大位数,使用的是开区间。我们知道使用FD_SET是对描述字集进行设置,而实际上的操作是对于描述字集fd_set的对应位置1,例如int fd = 5,则执行FD_SET宏后,fd_set描述字的第五位置1,即***10000;若此时,fd_set不足5位则无法完成fd_set描述字集的正确注册,因此,每次调用select函数之前都要保证n大于描述字集fd_set的最大位数,即最大位数+1。
综上所述,使用select函数,在每次进行描述字集注册,即调用select函数之前一定要注意fd_set、timeval和n的重置。
0 0
- select函数使用时应注意的问题
- pthread_create()和pthread_atfork()函数使用时应注意的问题
- 使用fopen时应注意的问题
- 使用Sql时应注意的问题
- matlab随机函数rand使用中应注意的问题
- 使用scanf()函数应注意的问题??
- 编写函数时应注意的几点问题
- 定义copy构造函数时应注意的问题
- 函数重载(overloading)应注意的问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题(转)
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 百度笔试题
- 计算机视觉——算法与应用
- 坚持#第38天~独在异乡为异客,每逢佳节倍思亲
- 【VS开发】visual studio 2015的NuGet Manager解决方案管理功能
- struct hostent结构体使用
- select函数使用时应注意的问题
- 【Thinking in Java】操作符
- JS
- ASP.NET Web API实现缓存的2种方式
- LINQ to SQL语句之用户定义函数
- DataReader和DataSet的异同
- LINQ to SQL语句之DataContext
- HDU 5726 求gcd=k的区间的个数 (二分+RMQ)
- stringbuilder