5

CでZeroMQ3.2を使用しています。問題は、リモートエンドポイントに接続しようとするたびに発生することです。

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

rcは常に0です。これは、APIで言及されているようにすべてがOKであることを意味します。リッスンしているサーバーがまったくない場合でも。

私は何かが恋しいですか?

4

2 に答える 2

4

すべてがそうあるべきです。ZeroMqの利点(もちろん、見方によって異なります)は、サーバーの起動後に接続する必要がないことです。つまり、サーバーへの接続が一時的にダウンしている場合でも接続できます。ZeroMqは接続(要求)を維持し、再試行します。

zmq_connect()のApiドキュメントには、次のように記載されています。

ほとんどのトランスポートとソケットタイプでは、接続はすぐには実行されませんが、ØMQの必要に応じて実行されます。したがって、zmq_connect()の呼び出しが成功したからといって、接続が実際に確立された、または確立された可能性があるという意味ではありません。このため、ほとんどのトランスポートおよびソケットタイプでは、サーバーソケットがバインドされ、クライアントソケットがそれに接続される順序は重要ではありません。最初の例外は、inproc://トランスポートを使用する場合です。zmq_connect()を呼び出す前にzmq_bind()を呼び出す必要があります。2番目の例外はZMQ_PAIRソケットで、エンドポイントに自動的に再接続しません。

ドキュメントに見られるように、応答しない/存在しないエンドポイントのエラーコードはありません。基本的に、有効なエンドポイントを提供する限り(たとえば、プロセスごとのソケットの制限に達しない限り)、問題はありません。

于 2013-02-04T17:08:11.857 に答える
1

As the guide states:

As soon as the client node does zmq_connect() the connection exists and that node can start to write messages to the socket. At some stage (hopefully before messages queue up so much that they start to get discarded, or the client blocks), the server comes alive, does a zmq_bind() and ØMQ starts to deliver messages.

于 2013-02-04T13:27:06.227 に答える