首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

socket里面的FD_SET宏还能一上加入很多个套接字

2012-08-14 
socket里面的FD_SET宏还能一下加入很多个套接字?刚看了一段代码,大概是有一段是这样:C/C++ codeint functi

socket里面的FD_SET宏还能一下加入很多个套接字?
刚看了一段代码,大概是有一段是这样:

C/C++ code
int function(SOCKET sock[100]){      int ret;      struct timeval tv = {1, 0};          while (TRUE)           {                 FD_ZERO(&fdread);                 for (i = 0; i < 100; i++)             {                 FD_SET(sock[i], &fdread);             }                     // We only care read event             ret = select(0, &fdread, NULL, NULL, &tv);             for (i = 0; i < 100; i++)             {                  if (FD_ISSET(g_CliSocketArr, &fdread))                  .......             }} 

他那个难道可以用一个for循环一次把100个套接字都加入集合?然后再一个select?
我原以为是一个FD_SET一个select的,他那样做对吗?我是新手不太明白。
还有那个struct timeval tv,他这样做是每隔一秒干一次什么事情?

[解决办法]
FD_SET(sock[i], &fdread);
将100个soket 加入fdread,fdread 是一个socket set,
select 如果这100个socket里面有别人给它发数据,select会返回(没数据则阻塞)。将有数据的socket填充至fdread,如果g_CliSocketArr在fdread里面,证明客户端来了数据。这个时候对g_CliSocketArr调用recv就能收到数据了。

tv是个时间值,表明select函数阻塞多长时间返回。

热点排行