c++ - ZeroMQ——尝试在 C++ 中运行 asyncsrv 时为 "Socket operation on non-socket"

标签 c++ sockets zeromq

我一直在尝试使用 C++(使用 cppzmq 绑定(bind))使用 ZeroMQ 运行异步服务器。我的文件编译正常,但我在 zmq::error_t 类型的运行时出现错误:“非套接字上的套接字操作”。

Here's the file that's apparently giving the error.我在 asyncsrv example 之后建模来自“ZeroMQ:指南”,修复了示例中的一些错误(例如出于某种原因尝试 std::bind 到 vector )。

如果需要,这是我的 class definitions for the related source file .

代码拷贝:

#include "worker.hpp"

void SkidooshBrokerTask::run() {
    frontend.bind("tcp://*:20401");
    backend.bind("inproc://backend");

    std::vector<SkidooshBrokerWorker *> workers;
    std::vector<std::thread *> worker_threads;

    for (int i=0; i<kMaxThread; ++i) {
        workers.push_back(new SkidooshBrokerWorker(ctx,ZMQ_DEALER));
        worker_threads.push_back(new std::thread(std::bind(&SkidooshBrokerWorker::work, workers[workers.size()-1])));
        worker_threads[worker_threads.size()-1]->detach();
    }

    try {
        zmq::proxy(&frontend,&backend,nullptr);
    } catch (std::exception &e) {

    }

    for (int i=0;i<kMaxThread; ++i) {
        delete workers[i];
        delete worker_threads[i];
    }
}

void SkidooshBrokerWorker::work() {
    wk_sck.connect("inproc://backend");        
    try {
        while (true) {
            zmq::message_t identity;
            zmq::message_t msg;
            zmq::message_t copied_id;
            zmq::message_t copied_msg;
            std::string rq_str;
            wk_sck.recv(&identity);
            wk_sck.recv(&msg);

            rq_str = std::string(static_cast<char *>(msg.data()),msg.size());
            copied_id.copy(&identity);
            copied_msg.copy(&msg);
        }
    } catch (std::exception &e) {}
}

最佳答案

我知道这是一个迟到的答案。但是我在使用 zmq::poll() 时出现了同样的错误。

你可以尝试改变

try 
{
    zmq::proxy(&frontend,&backend,nullptr);
} catch (std::exception &e) {}

try 
{
    zmq::proxy((void*)(&frontend),(void*)(&backend),nullptr);
} catch (std::exception &e) {}

引用:更多详情请查看this线程。

关于c++ - ZeroMQ——尝试在 C++ 中运行 asyncsrv 时为 "Socket operation on non-socket",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226659/

相关文章:

c++ - 编译器在传递 const 变量 : template argument is not a constant expression 时返回错误

c++ - 从 C++ 调用 Cython 函数

c++ - 为什么 Visual C++ 2010 提示 'Using uninitialized memory' ?

java - 套接字编程中的基本控制流程

java - 尝试从套接字读取时连接重置

c++ - 如何存储稀疏矩阵?

python - 有断开连接按钮和连接按钮吗?

c++ - 如何使负载平衡代理更加完全异步?

Node.js 事件代理

visual-studio - 错误 MSB6006 : “cmd.exe” exited with code 2 - in Visual Studio 2010