[zeromq-dev] OUT OF MEMORY on Win using inproc transport
Dimiter 'malkia' Stanev
malkia at gmail.com
Thu Jan 19 03:54:24 CET 2012
I'm using latest libzmq-3.1.0 so some of the functions changed a bit.
I'm also a "C" coder more than "C++", and never used boost, but that to
be said, this example did not ever made problem for me:
I was using my own built zmq.dll from luajit ffi bindings that I keep:
https://github.com/malkia/ufo/tree/master/bin/Windows/x86
// file: a.c
// compile with: cl -O2 -MD a.c
// I'm using Windows WDK 7.1, but Windows SDK 7.1, or Visual Studio
prompt should work too
#include <process.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "..\..\..\..\libzmq\include\zmq.h"
#pragma comment(lib,"zmq")
#define INTERNAL_DATA_SOCKET "inproc://data"
#define MESSAGE "{\"m_t\": 0, \"data\": {}}"
void *context;
static char msg[] = MESSAGE;
unsigned __stdcall outputWorker(void*);
int main(int argc, char* argv[]) {
void* intDataSocket;
int messagesToStore = 1;
context = zmq_init(1);
_beginthreadex(NULL, 0, outputWorker, NULL, 0, NULL);
intDataSocket = zmq_socket(context, ZMQ_PUB);
printf("intDataSocket=%d\n",intDataSocket);
printf("zmq_connect=%d\n",zmq_connect(intDataSocket,
INTERNAL_DATA_SOCKET));
printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket,
ZMQ_SNDHWM, &messagesToStore, sizeof(messagesToStore)));
printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket,
ZMQ_RCVHWM, &messagesToStore, sizeof(messagesToStore)));
while(1) {
int rc = zmq_send(intDataSocket, msg, sizeof(msg), 0);
assert(rc == sizeof(msg));
}
return 0;
}
unsigned __stdcall outputWorker(void*a) {
void *intDataSocket = zmq_socket(context, ZMQ_SUB);
printf("zmq_bind=%d\n",zmq_bind(intDataSocket,
INTERNAL_DATA_SOCKET));
printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket,
ZMQ_SUBSCRIBE, "", 0));
while(1) {
char buf[sizeof(msg)];
int rc = zmq_recv(intDataSocket, buf, sizeof(buf), 0);
assert(rc = sizeof(buf));
}
return 0;
}
On 1/18/2012 4:24 PM, Serg Gulko wrote:
> Correction - lines 59, 60 and 62
>
> On Wed, Jan 18, 2012 at 7:07 PM, Serg Gulko <s.gulko at gmail.com
> <mailto:s.gulko at gmail.com>> wrote:
>
> Hello!
>
> Thanks for hint, I really was using HWM incorrectly. I changed it
> according spec but problem is still here..
>
> http://pastebin.com/tDFpbhM0
>
>
> But when I commented any operations on subscriber part(lines 68, 69,
> 70 and 71) everything working without problems.
>
> Serg
> On Wed, Jan 18, 2012 at 3:46 PM, Chuck Remes <cremes.devlist at mac.com
> <mailto:cremes.devlist at mac.com>> wrote:
>
>
> On Jan 18, 2012, at 2:32 PM, Serg Gulko wrote:
>
> > Yes, in this example I using constant size message(22 bytes)
> - I want keep only one 22 bytes message.
> > Or I wrong?
>
> You are wrong. For HWM, you pass the *number of messages*. What
> your code does is pass the *number of bytes*. That is incorrect.
>
> Change it to set the HWM to 1. There are lots of C code examples
> in the guide. Refer to one of those examples for the exact syntax.
>
> cr
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org <mailto: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