Когда вы отправляете или получаете что-либо в сокете типа ZMQ_STREAM
, первый фрейм данных должен быть идентификатором, указывающим, куда должны идти последующие фреймы или откуда они пришли.
При использовании ZMQ_STREAM
сокет как сервер (т.е. вы вызываете bind
на сокете), тогда вы можете просто извлечь этот идентификационный кадр с помощью recv
и отправить его снова, когда ответите.
При использовании в качестве клиента (т.е. вы звоните connect
на сокете), затем вам нужно получить идентификатор из сокета, вы можете сделать это через getsockopt
с флагом ZMQ_IDENTITY
.
Размер идентификатора ограничен максимум 255 байтами.
// get the id after you've called connect
std::size_t id_size = 256;
char id[ 256 ];
socket->getsockopt( ZMQ_IDENTITY, &id, &id_size );
// send the id frame
socket->send(id, id_size, ZMQ_SNDMORE);
// then your data
char message[] = "HELLO, WORLD!";
socket->send(message, strlen(message), ZMQ_SNDMORE);
В документации по ZMQ_STREAM более подробно рассказывается о том, как вы будете получать уведомления и контролировать соединения, отключения и т. Д.