1

C(AF_UNIX)のUNIXソケットでgetaddrinfoを使用できるかどうかは誰にもわかりません。いくつか試してみましたが、うまくいきません。これは基本的に私がしようとしていることです:

struct addrinfo hints, *res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNIX;
hints.ai_socktype = SOCK_STREAM;
if(getaddrinfo("What should I put here?", "What should I put here?", &hints, &res) != 0){
    //do sth about
}

私の質問は、UNIXソケットで使用できる場合に備えて、ノードとサービスのフィールドに入力する方法です。
前もって感謝します。

4

3 に答える 3

4

の一部の実装ではソケット アドレスgetaddrinfo()がサポートされAF_UNIXていましたが、セキュリティ上の問題によりサポートされなくなりました。

いずれにせよ、アドレスを「検索」する関数は実際には必要ありません。ソケット パスがわかっている場合は、それを十分なサイズのAF_UNIXファイルに直接コピーできます。sockaddr_unアドレスの解決手順はありません。AF_UNIXソケット名ソケット アドレスです。

于 2012-05-15T13:51:37.680 に答える
0

かなり遅れましたが、記録のために、これを試しましたか - struct addrinfo Hints, *res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNSPEC;   //is the address family(IPV4 or 6) or UNSPEC for either
hints.ai_socktype = SOCK_STREAM; 
if(getaddrinfo(parm1, parm2, &hints, &res) != 0){
    //do sth about
}

parm1 -> は、接続先のホスト名またはアドレスです。ここで NULL を指定して呼び出すと、ローカル ホストのアドレスが設定されます。その場合は、hints.ai_flags=AI_PASSIVE を指定します。parm2 -> は、目的のサービス (http、ftp など) の名前、またはソケットが使用されるサービスに対応するポート番号です。

于 2014-01-13T10:48:16.777 に答える
-1

からman 3 getaddrinfo:

ヒントパラメーターは、優先するソケット タイプまたはプロトコルを指定します。NULL ヒントは、任意のネットワーク アドレスまたはプロトコルが受け入れられることを指定します。このパラメーターが NULL でない場合、ai_family、ai_socktype、および ai_protocol メンバーが優先ソケット タイプを指定する addrinfo 構造体を指します。ai_family の AF_UNSPEC は、任意のプロトコル ファミリ (IPv4 または IPv6 など) を指定します。ai_socktype または ai_protocol の 0 は、任意のソケット タイプまたはプロトコルも受け入れられることを指定します。ai_flags メンバーは、以下に定義する追加オプションを指定します。複数のフラグは論理 OR で指定します。ヒント パラメーターの他のすべてのメンバーには、0 または null ポインターが含まれている必要があります。

hintsしたがって、UNIXソケットが必要であることを伝えるためにパラメーターを渡す必要があるようです。

于 2011-08-01T01:37:49.707 に答える