[zeromq-dev] Limit of characters for zmq_send ?
Dorvin
dorvin at tlen.pl
Wed Mar 18 09:00:28 CET 2015
From api docs on zmq_recv: "Any bytes exceeding the length specified by
the len argument shall be truncated". You try to send 1k chars and your
buffer can store 256.
Additionally read about buffer overflows and how strcat works.
Cheers
W dniu 2015-03-18 o 07:22, Bachmair Florian - flexSolution GmbH pisze:
> Here is my example: I did it with CURVE but it's the same without CURVE
> I publish a String with 1024 'x' ending with "\nENDE" to determine that the end is sent as well
>
> publisher:
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <stdbool.h>
> #include <string.h>
> #include <czmq.h>
>
> #include <assert.h>
>
> // Convert C string to 0MQ string and send to socket
> static int s_send(void *socket, char *string) {
> int size = zmq_send(socket, string, strlen(string), 0);
> return size;
> }
> // Sends string as 0MQ string, as multipart non-terminal
> static int s_sendmore(void *socket, char *string) {
> int size = zmq_send(socket, string, strlen(string), ZMQ_SNDMORE);
> return size;
> }
> int main() {
> char str[1024];
> int i;
> strcpy(str, "x");
> for (i = 0; i < sizeof(str); i++) {
> strcat(str, "x");
> }
> strcat(str, "\nENDE");
> puts(str);
>
> puts("Init Publisher");
> const char *addr = "tcp://127.0.0.1:8888";
> zctx_t *context = zctx_new();
>
> void *pub = zsocket_new(context, ZMQ_PUB);
>
> zcert_t *server_cert = zcert_load("server_cert.txt_secret");
> assert(server_cert);
> int rc = zsocket_bind(pub, addr);
> assert(rc != -1);
> sleep(5);
> puts("publish");
> for (i = 0; i < 10; i++) {
> sleep(1);
> s_sendmore(pub, "A");
> s_send(pub, str);
> }
>
> return 0;
> }
>
>
> subscriber
>
> #include <stdlib.h>
> #include <stdint.h>
> #include <stdio.h>
> #include <stdbool.h>
> #include <string.h>
> #include <czmq.h>
> #include <assert.h>
> static char *
> s_recv(void *socket) {
> char buffer[256];
> int size = zmq_recv(socket, buffer, 255, 0);
> if (size == -1)
> return NULL;
> if (size > 255)
> size = 255;
> buffer[size] = 0;
> return strdup(buffer);
> }
> int main(void) {
> puts("Init Subscriber");
> fflush(stdout);
> zctx_t* context = zctx_new();
>
> void* subscriber = zsocket_new(context, ZMQ_SUB);
>
> zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "A", strlen("A"));
>
> zsocket_connect(subscriber, "tcp://127.0.0.1:8888");
>
> //zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "B", 1);
> while (1) {
> char *topic = s_recv(subscriber);
> char *value = s_recv(subscriber);
>
> printf("%s:%s\n", topic, value);
> free(topic);
> free(value);
> }
> // We never get here, but clean up anyhow
> zmq_close(subscriber);
> zmq_ctx_destroy(context);
> }
>
>
> -----Ursprüngliche Nachricht-----
> Von: zeromq-dev-bounces at lists.zeromq.org [mailto:zeromq-dev-bounces at lists.zeromq.org] Im Auftrag von Pieter Hintjens
> Gesendet: Dienstag, 17. März 2015 15:23
> An: ZeroMQ development list
> Betreff: Re: [zeromq-dev] Limit of characters for zmq_send ?
>
> There's no limit. Can you provide a minimal example that shows the problem?
>
> On Tue, Mar 17, 2015 at 12:53 PM, Bachmair Florian - flexSolution GmbH
> <Florian.Bachmair at flexsolution.eu> wrote:
>> Hi!
>>
>>
>>
>> I have tried to send/publish string with 1000 characters. But the subscriber
>> only gets about 200-300 of these characters, the rest is cut off.
>>
>>
>>
>> Is there a Limit?
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
More information about the zeromq-dev
mailing list