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

标签 c++ windows tcp zeromq

我正在尝试在本地网络中使用 PUSH/PULL 模式进行分布式计算。 到目前为止,一切似乎都很顺利,但是,我发现在 31 个工作线程(服务器)启动时,客户端(通风机和收集器)应用程序崩溃了。

Windows 上对某个端口的连接是否有限制(在 MacOs X 上似乎并非如此)。我使用 tcp 传输端口以及端口 5555 和 5556,如 Zeromq 示例中所示。该行为是远程和本地工作人员的观察者。

谢谢

更新:这是代码(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++ -oworker.exe taskworker.cpp -L/./lib -lzmq -L/./lib/zeromq/libzmq.la -liphlpapi -lrpcrt4 -lws2_32 -lpthread

最佳答案

好的。我把它归结为这个问题here 。问题是,在 Windows 上,默认情况下 FD_SETSIZE 限制为 64。(这会导致代码崩溃 - 实际上对于 32. 工作线程来说)。 FD_SETSIZE 可以在构建 0mq 期间修改(CPPFLAG="-DFD_SETSIZE=1024")。 现在崩溃已经消失了。

关于c++ - Zeromq:在 Windows 上连接 31. 服务器后,PULL/PUSH 客户端崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209790/

相关文章:

c++ - 是否可以获取正在监听 Windows 端口的进程的线程 ID?

c# - 从 TcpClient 获取源 IP

C++ 在构造函数中捕获异常

c++ - 如果我在 xp 中开发 c++ win32 GUI,我在不同的 win 操作系统中运行时会有问题吗

PHP Rename() 删除 Windows 中的所有者属性?

c++ - 如何知道是否有任何可供安装的 Windows 操作系统更新?

c++ - 我应该实现自己的 TCP/IP 套接字超时吗?

qt - 拒绝到 TCP 服务器的传入连接

c++ - 如何在 C/C++ 中使用 CAP_REWINDPAGE 作为 TWAIN api?

c++ - 模板类和根据迭代调用不同的构造函数