天天看點

使用Select的3個注意事項

#include <sys/select.h>

int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);

FD_CLR(int fd, fd_set *set);

FD_ISSET(int fd, fd_set *set);

FD_SET(int fd, fd_set *set);

FD_ZERO(fd_set *set);

注意事項:

1 每次調用前,重新設定所關心的描述符;

2 每次調用前,重新設定等待時間;

3 準備好的描述符定義為: read/write 描述符時不會阻塞 (socket 斷開将可讀 ) 。

解釋:

1 fd_set* 以指針形式傳入, select 将掃描所關心的描述符,改變其值後傳回。使用者判斷此傳回值得知哪些描述符可讀 / 可寫。這意味着:在 select 傳回後,描述符集必須重新設定!

2 Timeout 以指針傳入,就是說系統不保證其值不會被更改!

本文轉自 zhenjing 部落格園部落格,原文連結: http://www.cnblogs.com/zhenjing/archive/2011/04/20/2021770.html  ,如需轉載請自行聯系原作者

繼續閱讀