2

ZeroMQとIPv6で困っています。IPv4 経由の接続を使用するか、「tcp://[::1]:5558」を使用すると、魔法のように接続されます。ただし、(ローカル ホストまたはリモート ホストで) サーバーの完全な IPv6 アドレスを使用すると、サーバーは接続しますが、他のエンドポイントでデータを取得しません。

ここに私のコードサンプルがあります:

client.cpp

#include <stdio.h>

#include <zmq.h>

int main(int argc, char** argv)
{
    void* context = zmq_ctx_new();
    void* socket = zmq_socket(context, ZMQ_SUB);
    int ipv6 = 1;
    zmq_setsockopt(socket, ZMQ_IPV6, &ipv6, 4);
    zmq_connect(socket, "tcp://[fe80::52e5:49ff:fef8:dbc6]:5558");
    //zmq_connect(socket, "tcp://[::1]:5558");
    zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "pub", 3);

    zmq_msg_t message;
    do {
        zmq_msg_init (&message);
        zmq_msg_recv (&message, socket, 0);
        printf("%s\n", (char*)zmq_msg_data(&message));
        zmq_msg_close(&message);
    } while (zmq_msg_more(&message));
}

そしてserver.cpp

#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#include <zmq.h>

int main(int argc, char**argv)
{
    void* context = zmq_ctx_new();
    void* publisher = zmq_socket(context, ZMQ_PUB);
    int ipv6 = 1;
    zmq_setsockopt(publisher, ZMQ_IPV6, &ipv6, sizeof(int));

    zmq_bind(publisher, "tcp://*:5558");

    char buffer[4] = "pub";
    unsigned tries = 0;

    while(tries < 10) {
        zmq_send(publisher, &buffer, strlen(buffer), 0);
        tries++;
        sleep(1);
    }

    return 0;
}

私は ZeroMQ 4.0.0 RC を使用していますが、3.2 でも発生しています。私は Linux (slackware) を使用しており、ソースからインストールしました。また、jeroMQ を使用して Java サーバーを使用してテストしましたが、問題は同じです。REQ-REP 接続を使用して別のテストを行いましたが、問題は同じです。

助けてくれてありがとう。

4

1 に答える 1

4

fe80*アドレスはリンク ローカルです。ローカル ホストのリンク名を指定する必要があります。fe80...:1%eth1

fe80::/10 — リンクローカル プレフィックスのアドレスは、単一のリンクでのみ有効で一意です。このプレフィックス内では、1 つのサブネットのみが割り当てられ (54 個のゼロ ビット)、fe80::/64 の有効な形式が生成されます。最下位の 64 ビットは通常、変更された EUI-64 形式で構築されたインターフェイス ハードウェア アドレスとして選択されます。リンクローカル アドレスは、IPv6 対応のすべてのインターフェイスに必要です。つまり、IPv6 ルーティングがない場合でも、アプリケーションはリンクローカル アドレスの存在に依存する可能性があります。これらのアドレスは、IPv4 の自動構成アドレス 169.254.0.0/16 に匹敵します。

http://en.wikipedia.org/wiki/IPv6_address#Local_addresses

于 2013-09-25T19:37:36.530 に答える