zeromq:在Windows上连接31.服务器后,PULL / PUSH客户端崩溃

时间:2013-06-20 09:14:40

标签: c++ windows tcp zeromq

我正在尝试在本地网络中进行分布式计算的PUSH / PULL模式。 到目前为止,一切似乎都有效,但是,我发现在31工作人员(服务器)启动时,客户端(呼吸机和收集器)应用程序崩溃。

Windows上某个端口的连接是否有限制(在MacOs X上似乎不是这种情况)。我在zeromq示例中使用tcp trans端口和端口5555和5556。行为是远程和本地工作者的观察者。

THX

更新:继承代码(来自zmq指南的修改样本)

#include <zmq.hpp>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <sstream>

int main (int argc, char *argv[])
{
    zmq::context_t context(1);

    int number_of_sockets=32;       // 32 will crash, 30 will pass

    zmq::socket_t** receiver=new zmq::socket_t*[number_of_sockets];
    zmq::socket_t** sender=new zmq::socket_t*[number_of_sockets];

    std::cout<< "go"<<std::endl;
    for (int i=0;i<number_of_sockets; i++)
    {
        receiver[i]=new zmq::socket_t(context, ZMQ_PULL);
        receiver[i]->connect("tcp://localhost:5555");
    }

    std::cout<< "ok"<<std::endl;

    for (int i=0;i<number_of_sockets; i++)
    {
        sender[i]=new zmq::socket_t(context, ZMQ_PUSH);
        sender[i]->connect("tcp://localhost:5556");
    }   

    std::cout << "done" <<std::endl;

    return 0;
}    

我使用命令构建使用Mingw-w64-tdm(4.5): g++ -o worker.exe taskworker.cpp -L/./lib -lzmq -L/./lib/zeromq/libzmq.la -liphlpapi -lrpcrt4 -lws2_32 -lpthread

1 个答案:

答案 0 :(得分:2)

确定。我把它归结为这个问题here。问题是,在Windows上,默认情况下FD_SETSIZE限制为64.(这会导致代码崩溃 - 实际上是32个工作者)。在构建0mq(CPPFLAG =“ - DFD_SETSIZE = 1024”)期间可以修改FD_SETSIZE。 现在崩溃了。