I have compiled libzmq with openpgm with no changes under windows. Code here is taken from ZeroMQ Guide ("weather publisher" server/client). But if i change "tcp" to "epgm" it doesn't work any more (data is not received, but connection is established).
void test_serv() { // Prepare our context and publisher void *context = zmq_ctx_new(); void *publisher = zmq_socket(context, ZMQ_PUB); int rc = zmq_bind(publisher, "epgm://127.0.0.1:5556"); assert(rc == 0); // Initialize random number generator srandom((unsigned)time(NULL)); while (!stop_server) { // Get values that will fool the boss int zipcode, temperature, relhumidity; zipcode = randof(1000) + 600; temperature = randof(215) - 80; relhumidity = randof(50) + 10; // Send message to all subscribers char update[20]; sprintf(update, "%d %d %d", zipcode, temperature, relhumidity); s_send(publisher, update); } LOG("END Server shutdown"); Sleep(500); zmq_close(publisher); zmq_ctx_destroy(context); } void test_sock() { // Socket to talk to server LOG("Collecting updates from weather server..."); void *context = zmq_ctx_new(); void *subscriber = zmq_socket(context, ZMQ_SUB); int rc = zmq_connect(subscriber, "epgm://127.0.0.1:5556"); assert(rc == 0); // Subscribe to zipcode, default is NYC, 10001 char *filter = "1001 "; rc = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, filter, strlen(filter)); assert(rc == 0); // Process 100 updates int update_nbr; long total_temp = 0; for (update_nbr = 0; update_nbr < 10; update_nbr++) { char *string = s_recv(subscriber); int zipcode, temperature, relhumidity; sscanf(string, "%d %d %d", &zipcode, &temperature, &relhumidity); total_temp += temperature; LOG(">> " << string); free(string); } LOG("Average temperature for zipcode "<< filter << "was " << (int)(total_temp / update_nbr) << 'F'); zmq_close(subscriber); zmq_ctx_destroy(context); }
I run two functions in different threads, with tcp anything works as expected.
I have tried doing "route print 0.0.0.0" with cmd.exe and using interface IP (192.168.137.64) as prefix instead of "eth0" like shown in RFC: epgm://192.168.137.64;127.0.0.1:5556 on connect and/or bind, but this brokes my socket and raises error.
Also "PGM" requires administrator rights and i cannot test it now.
The error IS NOT "protocol not supported" errno is set to B (11) and i don't understand what does it mean (no docs on it).