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函数阻塞多长时间返回。