-void CheckerSide::start(void (*handler)(int, short, void*))
-{
- base_ = event_base_new();
+ auto* socket_event = event_new(
+ base, get_channel().get_socket(), EV_READ | EV_PERSIST,
+ [](evutil_socket_t sig, short events, void* arg) {
+ auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
+ if (events == EV_READ) {
+ std::array<char, MC_MESSAGE_LENGTH> buffer;
+ ssize_t size = recv(checker->get_channel().get_socket(), buffer.data(), buffer.size(), MSG_DONTWAIT);
+ if (size == -1) {
+ XBT_ERROR("Channel::receive failure: %s", strerror(errno));
+ if (errno != EAGAIN)
+ throw simgrid::xbt::errno_error();
+ }