以下は、クライアントからの接続を受け入れるために書いたコードスニペットです。私はリモートホスト名を印刷したかったのです。 getnameinfo()はエラーで失敗します:ai_familyはサポートされていません。私はAF_UNSPECを指定するようにインターネット上でさまざまなオプションを試しました。何も私のために働いていません。 sa_familyフィールドが表示され、62752です。これは有効な値ですか?私は間違って何をしています。どんな助けもありがたい。ai_familyの有効な値は何ですか?
socklen_t sin_size;
struct sockaddr client_addr;
int sockfd = accept(serv_sockfd,&client_addr, &sin_size);
if(sockfd == -1)
error("Accept failed");
char remote_host[NI_MAXHOST];
cerr <<"sa_family" << client_addr.sa_family<<endl;
int en;
if ((en = getnameinfo(&client_addr, sin_size, remote_host, sizeof(remote_host),NULL, 0, NI_NAMEREQD))!=0)
cerr << "getnameinfo: " << gai_strerror(en);
else
printf("host=%s\n", remote_host);
acceptを呼び出す前に、使用しているアドレス構造体のサイズに 'sin_size'変数を設定する必要があります。 –
ありがとう、それは今働いています。私はこれが馬鹿に聞こえるかもしれないことを知っています、どう思いましたか?ちょうどコードを見て、またはゴミ値62752は私がいくつかの構造を台無しにしたことを示唆していますか? – FourOfAKind
コードを見て、「受け入れる」が何を望んでいるかを覚えておいてください。 :) –