このエラーが発生した後、私はここで答えを探していましたが、ほとんど誰もがこのエラーを修正するのは難しい方法でしたが、まったく起こるので、私はこの質問が正確に重複しているとは思わない。C - getaddrinfoは "Servnameはai_socktypeではサポートされていません"を返します
私はTCPソケットをC言語で書いています。ソケット名をホスト名とするために "getaddrinfo"関数を使いました。私のコードはgithubにあります。
が、ときに私は、私はこのエラーました "のgetaddrinfo" でUDP socketを作成しようとしました:私はとき気づいai_socktype
いるclient.c
const char *host = argv[1];
const char *service = argv[2];
const char *string = argv[3];
struct addrinfo addrCriteria;
memset(&addrCriteria, 0, sizeof(addrCriteria));
addrCriteria.ai_family = AF_UNSPEC;
addrCriteria.ai_socktype = SOCK_DGRAM;
addrCriteria.ai_protocol = IPPROTO_UDP;
struct addrinfo *servAddr;
int ret = getaddrinfo(host, service, &addrCriteria, &servAddr);
if(ret != 0)
sysError(gai_strerror(ret));
のためにサポートされていない
servnameのを私は "service"に8080のような数値入力を与えますが、エラーは返されませんが、ポート名/ 8081を指す "tproxy"のような文字列をサービス名として使用すると、 'gai_strerror'
明らかに、gai_strerrorはこう述べています。「サービス名は 'SOCK_DGRAM'ソケットタイプではサポートされていませんが、なぜですか?私は "getaddrinfo"の正確な理由は、UDPソケットを介してネームサービスをサポートしていないことを意味しますか?
ポート番号ではなくUDPソケットでサービス名を使用する他の方法はありますか?どうやって?
私は '/ etc/services'ファイルとTCPとUDPの異なるサービス名を見逃したとは思えません!これは私の大きな間違いを覚えていました。 TCPとUDPの両方の接続で定義されているように、 'http-alt' servnameで動作します。よろしくお願いします。 –