首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用epoll_wait和signalfd处理信号

使用epoll_wait和signalfd处理信号
EN

Stack Overflow用户
提问于 2017-04-04 23:55:24
回答 3查看 4.8K关注 0票数 6

我正在使用套接字和系统调用编写自己的echo server。我正在使用epoll同时处理许多不同的客户端,并且使用客户端完成的所有操作都是非阻塞的。当服务器启动且不执行任何操作时,它处于epoll_wait中。现在我想添加使用信号关闭服务器的可能性。例如,我在bash terminal中启动服务器,然后按ctrl-c,服务器就会以某种方式处理SIGINT。我的计划是使用signalfd。我使用以下代码创建新的signalfd并将其添加到epoll实例中:

    sigset_t mask;
    sigemptyset(&mask);
    sigaddset(&mask, SIGTERM);
    sigaddset(&mask, SIGINT);
    signal_fd = signalfd(-1, &mask, 0);

    epoll_event event;
    event.data.fd = signal_fd;
    event.events = EPOLLIN;
    epoll_ctl(fd, EPOLL_CTL_ADD, signal_fd, &event);

然后我期望,当epoll在等待时,我按下ctrl-cepoll上的事件发生,它被唤醒,然后我用以下代码处理信号:

    if (events[i].data.fd == signal_fd)
    {
        //do something
        exit(0);
    }

尽管在现实中,服务器只是停止而不处理信号。我做错了什么,解决问题的正确方法是什么?如果我对信号的理解不正确,那么应该在哪里使用signalfd

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43212106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档