2015-11-18 48 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 4.1.4版本的異常。對於setsockopt()getsockopt(),任何套接字選項都會導致無效參數。ZeroMQ setsockopt和getsockopt返回無效參數

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

使用int,而不是長長對於zeromq 4.x版的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 
          ); 

地圖上ZeroMQ API:

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

有效常數是ZMQ_HWM。使用ZMQ_SNDHWM和ZMQ_RCVHWM會引發編譯錯誤。 – Mahi

+0

@Mahi,目前的穩定版本是v4.1.3,爲什麼要用4.1.4?也檢查zmq.h:我的顯示沒有ZMQ_HWM。 http://pastebin.com/3FKGw6Pv – marsgpl