我使用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所述。即使沒有服務器監聽也不例外。
我想念什麼?
我使用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所述。即使沒有服務器監聽也不例外。
我想念什麼?
一切都是因爲它應該。 ZeroMq的一個優點(當然取決於你的看法)是服務器啓動後你不必連接,也就是說即使連接到服務器暫時關閉也可以連接。 ZeroMq將保持連接(請求)並再試一次。
爲zmq_connect() API文檔指出:
對於大多數運輸和套接字類型不立即進行連接,但需要通過ØMQ。因此,對zmq_connect()的成功調用並不意味着連接已經或可能實際建立。因此,對於大多數傳輸和套接字類型,綁定服務器套接字並將套接字連接到客戶端的順序並不重要。第一個例外是使用inproc:// transport時:您必須在調用zmq_connect()之前調用zmq_bind()。第二個例外是ZMQ_PAIR套接字,它不會自動重新連接到端點。
正如在文檔中看到的,沒有響應/現有端點的錯誤代碼。基本上,只要你提供了一個有效的端點(例如你並沒有例如點擊每個進程的套接字限制),你應該是好的。
當引導狀態:
只要客戶端節點確實zmq_connect()的連接存在 和該節點可以開始將消息寫入到套接字。在某個階段, (希望在消息排隊太多以至於他們開始丟棄 或客戶端阻止之前),服務器啓動,zmq_bind()和ØMQ開始傳遞消息。