epoll_wait直到按Enter才醒来

问题描述 投票:0回答:1

我是epoll的新手。我的代码工作正常。 epoll正在存储我的文件描述符,并等待直到文件描述符“就绪”。但是,由于某种原因,它直到我按Enter才会唤醒(即使数据已经接收到fd,并且在输入后我将立即看到之前已发送的所有数据)。输入一次后,它将按预期工作(无需输入,当fd准备就绪时它将再次唤醒)。

这是我的代码的本质:

    int nEventCountReady = 0;
    epoll_event event, events[EPOLL_MAX_EVENTS];
    int epoll_fd = epoll_create1(0);

    if(epoll_fd == -1)
    {
        std::cout << "Error: Failed to create EPoll" << std::endl;
        return ;
    }

    event.events = EPOLLIN;
    event.data.fd = myfd;

    if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, 0, &event))
    {
        fprintf(stderr, "Failed to add file descriptor to epoll\n");
        close(epoll_fd);
        return ;
    }

    while(true)
    {
        std::cout << "Waiting for messages" << std::endl;
        nEventCountReady = epoll_wait(epoll_fd, events, EPOLL_MAX_EVENTS, 30000); << Stuck until Enter will be pressed (at first while loop)
        for(int i=0; i<nEventCountReady; i++)
        {
            msgrcv(events[i].data.fd, oIpCMessageContent, sizeof(SIPCMessageContent), 1, 0);
            std::cout << oIpCMessageContent.buff << std::endl;
        }
    }
c++ epoll
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.