选择始终返回数据

时间:2017-02-27 19:09:52

标签: c sockets select

我正在使用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); 
            }
        }
    }
}

有人看到我的选择有问题吗?

1 个答案:

答案 0 :(得分:1)

select()的第一个参数高于最高套接字值,而不是套接字值+1的计数。

将第一个参数写为:

是'ok'
select( FD_SETSIZE+1, .... );   

这一行:

if (FD_ISSET(i, &master)) 

没有检查正确的建议:

if (FD_ISSET( sock_list[i], &master))