gpt4 book ai didi

c++ - 我们如何从 select() 函数中获取套接字列表?

转载 作者:行者123 更新时间:2023-11-28 07:32:51 25 4
gpt4 key购买 nike

我正在做一个网络项目,我知道 select() 函数(使用 FD_XXX)返回准备就绪并包含在 fd_set 结构中的套接字句柄总数,但我们知道这些套接字吗(作为 SOCKET 或 INT) ?只有一种方法可以使用 FOR LOOP-CHECK FD_ISSET 获取套接字列表,对吗?不然怎么办?

最佳答案

尽管别人怎么说 select() 的返回值,我在处理很多套接字时是这样使用的,它不能保证你不必处理所有列表,以防只有一个套接字恰好是最后一个,但如果是第一个,会保存一些代码。

int i;
int biggest=0;
fd_set sfds;
struct timeval timeout={0, 0};

FD_ZERO(&sfds);
for (i=0; i < NumberOfsockets; i++)
{
FD_SET(SocktList[i], &sfds);
if (SocktList[i] > biggest) biggest=SocktList[i];
}

timeout.tv_sec=30;
timeout.tv_usec=0;

// biggest is only necessary when dealing with Berkeley sockets,
// Visual Studio C++ (and others) ignore this parameter.
if ((nReady=select((biggest+1), &sfds, NULL, NULL, TimeOut)) > 0)
{
for (i=0; i < NumerbsOfSocket && nReady > 0; i++)
{
if (FD_ISSET(SocketList[i], &sfds)) {
// SocketList[i] got data to be read
... your code to process the socket when it's readable...
nReady--;
}
}
}

关于c++ - 我们如何从 select() 函数中获取套接字列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com