小编Nic*_*ock的帖子

select()系统调用不会解除阻塞

我很难让select()系统调用解除阻塞.我正在尝试从一组3个插槽中复用数据输入.我为一个名为sock []的int数组中的每个接口创建一个套接字.如果我取消注释第一个块,我可以毫无问题地在每个套接字上接收数据.通过评论它,我永远不会通过select()调用.关于select()设置和调用,你能看到我可能做错的事吗?

//This block will receive data from sock[0], sock[1], and sock[2] when left uncommented
   /*n = recvfrom(sock[2], buf, 1500,0,(struct sockaddr*)&recvaddr, &recvaddrlen);
    printf("\nrecieved\n");
    print_buf(buf);*/

    fd_set sockets;
    FD_ZERO(&sockets);
    for(i=0; i<3; i++){
        FD_SET(sock[i], &sockets);
    }


    select(3, &sockets, NULL, NULL, NULL);
    printf("\nSocket selected\n");
    for(i=0; i<3; i++){
        //Check for connected sockets
        if(FD_ISSET(i, &sockets)){
            printf("\nSocket %d", i);
            n = recvfrom(sock[i], buf, 1500,0,(struct sockaddr*)&recvaddr, &recvaddrlen);
        }
    }
Run Code Online (Sandbox Code Playgroud)

c sockets networking

1
推荐指数
1
解决办法
482
查看次数

标签 统计

c ×1

networking ×1

sockets ×1