2016-10-31 23 views
-3

struct addrinfoがどこに定義されているのか分かりません(ヘッダ?)。以下のようなstruct addrinfo *head;はランダムに使用されるが、ADDRINFOが宣言されることはありません。「addrinfo」についての情報はありますか?

を次に、それに(のaddrinfoに)データ型'socklen_t'がある。データ型または何が正確にそれがあることですか?

また、それになりstruct addrinfo *ai_nextがあります私にとって不思議なことです:それは何の役に立つのでしょうか?私の理解では、addrinfoは別のソケットとの接続方法に関する情報を格納しており、struct sockaddr *ai_addrはo接続しようとする。 TCP/IPの場合はIP番号とポート番号)。 それで、私はただ一つのaddrinfo構造体しか必要としません。なぜもっとあるの?

次に、getaddrinfoの最後の引数は何ですか?それはstruct addrinfo **resと呼ばれますが、私はそれが何であるか把握できません。

私の君たちのために非常に簡単であるかもしれない最後の1、許可する:私が言うとき

struct addrinfo hints = { 
    .ai_flags = AI_ADDRCONFIG, 
    .ai_socktype = SOCK_STREAM, 
    .ai_family = PF_UNSPEC 
}; 

iは、ヒント、訂正AMは型のaddrinfoと表記の別の構造体である:

.ai_flags = AI_ADDRCONFIG, 

はのために実際に短いです:

struct addrinfo hints; 
hints.ai_flags = AI.... 

Guysは、私はあなたが知っていることを読んでみましょう!あなたに 愛&に関して、このようなすべての

+2

['getaddrinfo'マニュアルページ(http://man7.org/linux/man-pages/man3/getaddrinfo.3.html)はあなたにすべてを伝えるべきです。または、インターネット上にたくさんあるチュートリアルを見つけてください。 –

+0

"ダブルポインタ"に関しては、Cで参照渡しをエミュレートする方法です。 –

+0

ダブルポインタは問題ではありません。 –

答えて

0

のaddrinfo構造体の外観:

struct addrinfo { 
       int    ai_flags; 
       int    ai_family; 
       int    ai_socktype; 
       int    ai_protocol; 
       socklen_t  ai_addrlen; 
       struct sockaddr *ai_addr; 
       char   *ai_canonname; 
       struct addrinfo *ai_next; 
       }; 

出典:http://man7.org/linux/man-pages/man3/getaddrinfo.3.html

socklen_tは、int型のtypedefです。

typedef _U32_TYPE int; 
... 
typedef socklen_t _U32_TYPE; 

出典:https://fossies.org/dox/glibc-2.24/bits_2types_8h.html

ai_nextは、リンクリストを作成するために使用されています。私はこの構造体の使い方を正確にはわかりませんが、複数のソケットに接続するだけでなく、複数のソケットに接続したいと考えています。

のgetaddrinfo()関数の割り当てとのaddrinfo構造体のリンクリスト、ヒントによって課される任意の制限を受けるノードとサービスを、一致する各ネットワーク・アドレスのための1つを初期化し、リストの先頭へのポインタを返しますである。

getaddrinfo()を呼び出した後、*resがリンクリストの最初の要素になります。

最後に、私はあなたの構文が正しいかどうか、本当にわからないんだけど、これは正しいです:あなたがそれを行うときに、あなたがこれを行うとしながら、あなたが直接、これらのメンバーを初期化

struct addrinfo hints = { 
    .ai_flags = AI_ADDRCONFIG, 
    .ai_socktype = SOCK_STREAM, 
    .ai_family = PF_UNSPEC 
}; 

struct addrinfo hints; 
hints.ai_flags = AI_ADDRCONFIG; 
hints.ai_socktype = SOCK_STREAM; 
hints.ai_family = PF_UNSPEC; 

(未定義のコンテンツで埋められている)構造を作成し、メンバーを初期化します。

結果は同じですが、メモリの動作は少し異なります。

+0

OPが宣言しました[指定されたイニシャライザ](https://en.wikipedia.org/wiki/C_syntax#Designated_initializers)を使用した 'ヒント '。ヒントの宣言が不正でコンパイルされません。 –

+0

ああ、そうです、編集しますそのミス – Ludonope

関連する問題