2013-02-04 27 views
4

我使用ZeroMQ 3.2 C.我的問題是,每當我試圖連接到一些遠程端點即使沒有服務器偵聽,爲什麼ZeroMQ連接返回0?

void* context = zmq_ctx_new(); 
void* socket = zmq_socket(context, ZMQ_DEALER); 
int rc = zmq_connect(socket, addr); 

RC始終爲0,這意味着每一件事情是O.K.正如API所述。即使沒有服務器監聽也不例外

我想念什麼?

回答

3

一切都是因爲它應該。 ZeroMq的一個優點(當然取決於你的看法)是服務器啓動後你不必連接,也就是說即使連接到服務器暫時關閉也可以連接。 ZeroMq將保持連接(請求)並再試一次。

zmq_connect() API文檔指出:

對於大多數運輸和套接字類型不立即進行連接,但需要通過ØMQ。因此,對zmq_connect()的成功調用並不意味着連接已經或可能實際建立。因此,對於大多數傳輸和套接字類型,綁定服務器套接字並將套接字連接到客戶端的順序並不重要。第一個例外是使用inproc:// transport時:您必須在調用zmq_connect()之前調用zmq_bind()。第二個例外是ZMQ_PAIR套接字,它不會自動重新連接到端點。

正如在文檔中看到的,沒有響應/現有端點的錯誤代碼。基本上,只要你提供了一個有效的端點(例如你並沒有例如點擊每個進程的套接字限制),你應該是好的。

1

當引導狀態:

只要客戶端節點確實zmq_connect()的連接存在 和該節點可以開始將消息寫入到套接字。在某個階段, (希望在消息排隊太多以至於他們開始丟棄 或客戶端阻止之前),服務器啓動,zmq_bind()和ØMQ開始傳遞消息。

相關問題