我正在使用select从两个套接字读取,我只从每个套接字发送一条消息。 select似乎永远不会超时,但总是会反复返回1或2,同时使用相同的消息。我每次通过while循环时都会重置选择参数。
这是我的代码:
while(1)
{
FD_ZERO(&master);
for (i = 0; i < fdmax; i++)
{
FD_SET(sock_list[i], &master);
}
tv.tv_sec = 1;
tv.tv_usec = 300;
int sel = select(fdmax, &master, NULL, NULL, &tv);
if (sel > 0)
{
for (i = 0; i < fdmax; i++)
{
if (FD_ISSET(i, &master))
{
recv_msg(i, buf);
print("msg from %d: %s %d %d\n", i, buf, sel, tv.tv_sec);
}
}
}
}
有人看到我的选择有问题吗?
答案 0 :(得分:1)
select()的第一个参数高于最高套接字值,而不是套接字值+1的计数。
将第一个参数写为:
是'ok'select( FD_SETSIZE+1, .... );
这一行:
if (FD_ISSET(i, &master))
没有检查正确的建议:
if (FD_ISSET( sock_list[i], &master))