GPSやその他の測地センサーを監視する、広く配備されているオープンソースのサービスデーモンであるGPSDを保守します。これは、IPv4とIPv6の両方でポート2947上のクライアントアプリケーション接続をリッスンします。セキュリティとプライバシーのために、通常はループバックアドレスでのみリッスンしますが、デーモンには任意のアドレスでリッスンさせるための-Gオプションがあります。CソケットAPIを使用してすべてのIPV6アドレスをリッスンする方法
問題:-GオプションはIPv4で動作しますが、IPv6で動作させる方法を理解できません。さまざまなチュートリアルの例に基づいて動作するメソッドは、代わりに、アドレスが既に使用されていることを示唆するエラーを生成しません。私は、IPv6ネットワークプログラミングで経験を積んだ人たちからこれを修正する助けを求めています。簡単には、netstat -lで検証されているよう
このコードは、IPv4下-Gおよび非-G両方の場合に正しく動作です。
"case AF_INET6:"の後に398行目を見てください。 listen_globalオプションは、-Gによって設定されます。 falseの場合、コードは成功します。このように読み込み、未知の要因から継承された次のコメントは、現在のところあり:
私が見上げている様々なチュートリアルの例によると/* else */
/* BAD: sat.sa_in6.sin6_addr = in6addr_any;
* the simple assignment will not work (except as an initializer)
* because sin6_addr is an array not a simple type
* we could do something like this:
* memcpy(sat.sa_in6.sin6_addr, in6addr_any, sizeof(sin6_addr));
* BUT, all zeros is IPv6 wildcard, and we just zeroed the array
* so really nothing to do here
*/
、代入「sat.sa_in6.sin6_addr = IN6ADDR_ANY;」コメントにもかかわらず正しいですし、コンパイルします。ただし、-Gを指定して起動すると、リスンアドレスが既に使用中であると主張して失敗します。
割り当ては "sat.sa_in6.sin6_addr = in6addr_any;"ですか?名目上ここで正しい?ほかに何かがあれば、私は行方不明ですか?
デーモンを酷使しようとしましたか? – jpalecek