2011-08-01 6 views
1

C(AF_UNIX)のunixソケットでgetaddrinfoを使うことができるかどうか知りませんか?私はいくつかのことを試しましたが、動作させることはできません。 これは私が何をしようとしている基本的には次のとおりです。Cでgetaddrinfo()を使ったUnixソケット

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ソケットで使用することが可能である場合には、ノードおよびサービスのフィールドを埋める方法です。
ありがとうございます。 man 3 getaddrinfoから

+0

何をしようとしていますか?どのように 'getaddrinfo'を呼び出しますか? –

答えて

-1

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

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

+0

はい、私の問題は、ソケットを指すファイルをどこに設定する必要があるのか​​わかりません。私はgetaddrinfoの最初と2番目の引数でそれをしようとしましたが、動作しません。 – esteban

+0

@esteban 'getaddrinfo'はUnixソケットでは有効ではないというヒントはありませんか?あなたは、APIを提供するための有効な 'node'または' service'を持っていません。 –

+0

@ Steve-oあなたが言ったように、それらは単なるヒントです。私は決定的な答えを探しています。そうでなければ、私は全く質問をしませんでした。とにかくありがとうございました。 – esteban

4

getaddrinfo()の実装によっては、AF_UNIXのソケットアドレスがサポートされていますが、セキュリティ上の理由からこれらのソケットアドレスはサポートされなくなりました。

とにかくAF_UNIXアドレスを "ルックアップ"する機能は必要ありません。ソケットパスを知っていれば、十分なサイズのsockaddr_unにそのままコピーできます。 AF_UNIXアドレスの解決手順はありません。ソケット名はソケットアドレスです。

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など)の名前またはソケットが使用されているサービスの対応するポート番号です。

関連する問題