auto mc = static_cast<simgrid::mc::ModelChecker*>(arg);
if (events == EV_READ) {
std::array<char, MC_MESSAGE_LENGTH> buffer;
- ssize_t size = mc->checker_side_.get_channel().receive(buffer.data(), buffer.size(), false);
- if (size == -1 && errno != EAGAIN)
- throw simgrid::xbt::errno_error();
+ ssize_t size = recv(mc->checker_side_.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();
+ }
if (not mc->handle_message(buffer.data(), size))
mc->checker_side_.break_loop();
return 0;
}
-ssize_t Channel::receive(void* message, size_t size, bool block) const
+ssize_t Channel::receive(void* message, size_t size) const
{
- ssize_t res = recv(this->socket_, message, size, block ? 0 : MSG_DONTWAIT);
+ ssize_t res = recv(this->socket_, message, size, 0);
if (res != -1) {
if (is_valid_MessageType(*static_cast<int*>(message))) {
XBT_DEBUG("Receive %s (requested %zu; received %zd)", to_c_str(*static_cast<MessageType*>(message)), size, res);
}
// Receive
- ssize_t receive(void* message, size_t size, bool block = true) const;
+ ssize_t receive(void* message, size_t size) const;
template <class M> typename std::enable_if_t<messageType<M>(), ssize_t> receive(M& m) const
{
return this->receive(&m, sizeof(M));