getaddrinfo()の動作について質問があります。これはサービス引数の指定方法に依存するようです。サービスを名前として指定すると、getsaddrinfo()はgetservbyname()を使用して/ etc/servicesデータベースを照会しますが、数値的に明らかにこのような照会は行われません。getaddrinfo - 数値と名前付きサービスの結果が異なる
たとえば、service = "5672"(amqpのポート)を指定すると、service = "amqp"を指定して、プロトコルIPPROTO_TCP、IPPROTO_UDP、およびIPPROTO_IPのaddrinfo構造体のリストを返し、addrinfo構造体のリストを返しますプロトコルIPPROTO_TCP、IPPROTO_UDP、およびIPPROTO_SCTPの場合
サービスが数値で指定されている場合、getaddrinfo()が/ etc/servicesデータベースを照会しないのはなぜですか?助けてくれてありがとう。
更新:
これは、単にgetaddrinfo()がサービスパラメータを処理するように設計されていることを示しています。あなたがポート番号を知っていれば、素晴らしい。あなたがサービス名だけを知っているなら、getaddrinfo()はあなたのためにポート番号を検索します。
SCTPが私のシステム(Ubuntu 16.04)にインストールされていても、getaddrinfo()はIPPROTO_SCTPを使ってaddrinfo構造体を返しません。 getaddrinfo()のソースを見ると、それはそれが知られていたすべてのプロトコルのaddrinfo構造体を返すように見えますが、その時にはが呼び出された時点でが呼び出されました。
私はSCTPをサポートするgetaddrinfo()のバージョンを取得するためにglibcを再構築する必要があるかもしれないと思います。誰でも私の理解を確認したり修正したりできますか?