Чтобы помочь вам, хотя слишком мало подробностей, чтобы правильно ответить:
С https://github.com/zeromq/libzmq/blob/master/src/tcp.cpp
int zmq::tcp_read (fd_t s_, void *data_, size_t size_)
{
#ifdef ZMQ_HAVE_WINDOWS
const int rc =
recv (s_, static_cast<char *> (data_), static_cast<int> (size_), 0);
// If not a single byte can be read from the socket in non-blocking mode
// we'll get an error (this may happen during the speculative read).
if (rc == SOCKET_ERROR) {
const int last_error = WSAGetLastError ();
if (last_error == WSAEWOULDBLOCK) {
errno = EAGAIN;
} else {
wsa_assert (
last_error == WSAENETDOWN || last_error == WSAENETRESET
|| last_error == WSAECONNABORTED || last_error == WSAETIMEDOUT
|| last_error == WSAECONNRESET || last_error == WSAECONNREFUSED
|| last_error == WSAENOTCONN);
errno = wsa_error_to_errno (last_error);
}
}
return rc == SOCKET_ERROR ? -1 : rc;
#else
Очевидно, что трассировка стека показывает прерываниепоэтому я ожидаю, что это от assert, который затем вызывает abort или Повышение исключения в Windows:
https://github.com/zeromq/libzmq/blob/master/src/err.cpp
Так что вам лучше всего посмотреть, были ли установлены соединения и открыты ли они,были закрыты, или любой из основных вопросов, которые проверяет утверждение.Если это неверные данные, то, вероятно, соединение было разорвано получателем, потому что это было недопустимое сообщение для ZMQ?
В любом случае, удачи, и вам нужно публиковать больше, чем это, чтобы получить лучшие ответы - на что похож получатель, что вы отправляете и чего вы на самом деле ожидаете ...