2012-11-17 113 views
0

我有一個c - zmq客戶端,接收2個隨機端口(從pyzmq服務器),然後連接到他們。zmq第二次連接失敗與einval

通常一切正常,但有時第二次連接失敗,並將errno設置爲EINVAL。 (即使我在連接呼叫之間切換,第二個仍然失敗)。

端口號很好,它看起來像zmq中的某種競爭條件。

有人知道我該如何解決這個問題?

編輯:例如 「1234:1235」: 服務器在該結構中發送的端口 「PORT2 PORT1」 在服務器上的數據包的hexdump都是31 32 33 34 3A 31 32 33 35 和上客戶端是31 32 33 34 31 3A 32 33 35 01

因爲第二連接額外的字節失敗...

也許這是某種pyzmq和ZMQ 我之間的兼容性的bug使用zmq ver 2.2.0

+0

什麼樣的插座類型是?你能發佈失敗的代碼嗎? – mechmind

+0

@mechmind使用連接(tcp://127.0.0.1:received_port1),連接(tcp://127.0.0.1:received_port2)打開一個REQ套接字和一個PAIR套接字 – Jah

+0

並且失敗的套接字是PAIR? – mechmind

回答

0

這不是zmq中的競爭條件,也不是zmq_connect的問題。假設額外的0x01字節是錯誤的。如果你將它傳遞給zmq_connect,除了EINVAL,你期望得到什麼結果?

那麼額外的字節從哪裏來?你是否知道在兩個同伴之間發送的所有消息?你在這個計劃中做什麼不同?

由於您尚未提供源代碼,因此很難提供比此更詳細的建議。

+0

我只在這個消息中得到了字節,而不是總是。有時它看起來有時不會出現。 – Jah