ZeroMQ setsockopt 和 getsockopt reing无效参数

ZeroMQ setsockopt and getsockopt returing invalid argument

本文关键字:无效 参数 reing getsockopt setsockopt ZeroMQ      更新时间:2023-10-16
int main () 
{
    zmq::context_t context(1);
    //  Socket to talk to clients
    zmq::socket_t push (context, ZMQ_PUSH);
    unsigned long long hwm;
    size_t hwmsz;
    push.getsockopt( ZMQ_HWM, &hwm, &hwmsz);
    cout << "HWM:" << hwm << endl;
}

执行上述代码会导致使用 zeromq 版本 4.1.4 出现以下异常。任何套接字选项都会导致 setsockopt()getsockopt() 的参数无效。

terminate called after throwing an instance of 'zmq::error_t'
  what():  Invalid argument
Aborted (core dumped)

您可能需要根据 API 规范检查代码以了解详细信息:

socket_t::socket_t(        context_t  &context,
                           int         type
                           );

映射到 ZeroMQ API:

void *zmq_socket (   void *context,
                     int   type
                     );

void socket_t::getsockopt( int         option_name,
                           void       *option_value,
                           size_t     *option_len
                           );

映射到 ZeroMQ API:

int zmq_getsockopt ( void   *socket,
                     int     option_name,
                     void   *option_value,
                     size_t *option_len
                     );

第一件事:必须初始化选项长度。

size_t hwmsz = sizeof(unsigned long long);

第二件事:

ZMQ_HWM - 这是一个已弃用的选项吗?

尝试获取 ZMQ_SNDHWM 和 ZMQ_RCVHWM 的值(它们是 int(