Search code examples
c++zeromqczmq

CZMQ set send HWM / set receive HWM


Doesn't this have to work?

#include <czmq.h>

zsock_t *sockout = zsock_new_pub("inproc://a");
zsock_set_sndhwm (sockout, 20);

How to set HWM and/or BUF sizes?

UPDATE: I added some more code and works in this context:

#include <string>
#include <czmq.h>

int main (void){

    zsock_t *sockout = zsock_new_pub("inproc://a");
    zsock_set_sndhwm (sockout, 20);
    std::string data2send;
    for (size_t i = 0; i < 1000; i++){
        data2send = "data" + std::to_string(i);
        zsock_send(sockout, "s", data2send.c_str() );
    }
}

Although zsock_set_sndhwm (sockout, 20); works in this particular context. I have to figure out the context where it doesn't works.


Solution

  • I am answering my own question for a complete solution pub/rec

    Publisher code:

    #include <string>
    #include <czmq.h>
    
    int main (void)
    {
        zsock_t *sockout = zsock_new_pub("ipc://a");
        zsock_set_sndhwm (sockout, 20);
        zsock_set_rcvhwm (sockout, 20);
    
        std::string data2send;
        for (size_t i = 0; i < 1000; i++){
            data2send = "data: " + std::to_string(i);
            sleep(1);
            zsock_send(sockout, "s", data2send.c_str() );
        }
    }
    

    Subscriber (Receiver) code:

    #include <string>
    #include <czmq.h>
    #include <iostream>
    
    int main (void){
        zsock_t *sockin = zsock_new_sub("ipc://a", "");
        zsock_set_sndhwm (sockin, 20);
        zsock_set_rcvhwm (sockin, 20);
    
        char *m;
        std::string m_str;
    
        while(true){
            zsock_recv(sockin, "s", &m);
            std::cout << "**READ: " << m << "\n\n";
        }
    }