我對getaddrinfo()的行爲有疑問,這似乎取決於如何指定服務參數。將服務指定爲名稱會導致getaddrinfo()使用getservbyname()查詢/ etc/services數據庫,但數字指定服務顯然不會導致此類查詢,並且這可能會導致結果的差異。getaddrinfo - 數字與命名服務的結果不同
例如,指定service =「5672」(amqp的端口),返回協議IPPROTO_TCP,IPPROTO_UDP和IPPROTO_IP的addrinfo結構列表,同時指定service =「amqp」,返回一個addrinfo結構列表對於協議IPPROTO_TCP,IPPROTO_UDP和IPPROTO_SCTP。
爲什麼getaddrinfo()在數字指定服務時查詢/ etc/services數據庫?謝謝你的幫助。原來,這只是getaddrinfo()的設計目的是如何處理服務參數。如果你知道端口號,太棒了。如果您只知道服務名稱getaddrinfo()將爲您查找端口號。
對我來說真正的問題是,即使SCTP安裝在我的系統(Ubuntu 16.04)上,getaddrinfo()也不會返回帶有IPPROTO_SCTP的addrinfo結構。查看getaddrinfo()的源代碼,它看起來像它返回的所有協議的addrinfo結構,它在構建它的時候知道的關於而不是當時被調用。
我想我可能需要重新編譯glibc來獲取支持SCTP的getaddrinfo()版本。任何人都可以確認或糾正我的理解?