socket里面的FD_SET宏还能一上加入很多个套接字
socket里面的FD_SET宏还能一下加入很多个套接字?刚看了一段代码,大概是有一段是这样:C/C++ codeint functi
socket里面的FD_SET宏还能一下加入很多个套接字?
刚看了一段代码,大概是有一段是这样:
C/C++ codeint 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函数阻塞多长时间返回。