+ struct Poller p {};
+ p.add_fd(STDIN_FILENO, [&c](int fd) {
+ int buf;
+ ssize_t ret;
+ ret = read(fd, &buf, sizeof(buf));
+ c.c->debug_dump_current_status();
+ return ret == 0 ? -1 : 0;
+ });
+
+ p.add_fd(d.get_fd(), [&d](int fd) { return d.dispatch(); });
+
+ sigset_t sset{};
+ sigemptyset(&sset);
+ sigaddset(&sset, SIGINT);
+ sigaddset(&sset, SIGTERM);
+
+ auto sfd = unique_fd(signalfd(-1, &sset, SFD_NONBLOCK | SFD_CLOEXEC));
+ sigprocmask(SIG_BLOCK, &sset, nullptr);
+ p.add_fd(sfd.fd, [](int fd) {
+ struct signalfd_siginfo si;
+ while (read(fd, &si, sizeof(si)) == sizeof(si)) {
+ lognotice("Received signal %u", si.ssi_signo);
+ }
+ return -1;
+ });