2015-11-18 1 views
0
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 version 4.1.4. Любая опция сокета приводит к недопустимому аргументу как для setsockopt(), так и для getsockopt().ZeroMQ setsockopt and getsockopt недействительный аргумент

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

Использование INT вместо долго долго переменной HWM – somdoron

ответ

0

Вы можете проверить свой код от спецификации 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 
          ); 

карты на API ZeroMQ:

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

Первое, что нужно: длина варианта должна быть инициализирована.

size_t hwmsz = sizeof(unsigned long long); 

Вторая вещь:

ZMQ_HWM - это устаревший вариант?

пытаются получить значения ZMQ_SNDHWM и ZMQ_RCVHWM (они int`s)

+0

в ZeroMQ 4.x действительная константа ZMQ_HWM. Использование ZMQ_SNDHWM и ZMQ_RCVHWM бросает ошибки компиляции. – Mahi

+0

@Mahi, текущая стабильная версия v4.1.3, почему вы используете 4.1.4? также проверьте zmq.h: mine показывает, что нет ZMQ_HWM. http://pastebin.com/3FKGw6Pv – marsgpl

 Смежные вопросы

  • Нет связанных вопросов^_^