- const pid_t pid = process_->pid();
-
- // Block SIGCHLD (this will be handled with accept/signalfd):
- sigset_t set;
- sigemptyset(&set);
- sigaddset(&set, SIGCHLD);
- if (sigprocmask(SIG_BLOCK, &set, nullptr) == -1)
- throw simgrid::xbt::errno_error(errno);
-
- sigset_t full_set;
- sigfillset(&full_set);
-
- // Prepare data for poll:
-
- struct pollfd* socket_pollfd = &fds_[SOCKET_FD_INDEX];
- socket_pollfd->fd = process_->getChannel().getSocket();
- socket_pollfd->events = POLLIN;
- socket_pollfd->revents = 0;
-
- int signal_fd = signalfd(-1, &set, 0);
- if (signal_fd == -1)
- throw simgrid::xbt::errno_error(errno);
-
- struct pollfd* signalfd_pollfd = &fds_[SIGNAL_FD_INDEX];
- signalfd_pollfd->fd = signal_fd;
- signalfd_pollfd->events = POLLIN;
- signalfd_pollfd->revents = 0;
+ checker_side_.start(
+ [](evutil_socket_t sig, short events, void* arg) { ((ModelChecker*)arg)->handle_events(sig, events); });