1. ホーム
  2. http

[解決済み] 0.0.0.0:80」と「:80」でのリスニングの違いは何ですか?

2022-02-16 19:32:37

質問

を使用する場合 http.ListenAndServe の違いは何ですか?

http.ListenAndServe("0.0.0.0:80", nil)

そして

http.ListenAndServe(":80", nil)

? どちらのバージョンも、すべてのインターフェイスで、ポート 80 ?

解決方法は?

その http.ListenAndServe() 関数は最終的に net.Listen() . のドキュメントは net.Listen には、提供されたネットワークにバインドすることが書かれています。

TCP ネットワークの場合、address パラメータの host が空またはリテラルな未指定 IP アドレスの場合、Listen はローカルシステムの利用可能なすべてのユニキャストおよびエニーキャスト IP アドレスでリッスンします。IPv4のみを使用するには、network "tcp4"を使用します。

しかし、そのソースを見ると http.ListenAndServe() が指定されていることがわかります。 "tcp" をネットワークとして使用し "tcp4" . つまり、どちらの呼び出しも利用可能なすべてのインターフェイスにバインドされるはずです。しかし、golangのソースをさらに掘り下げていくと、結局は internetAddrList() を区別していることがわかります。 host の値と、ipv4アドレスが指定されている値です。つまり、golangは指定されたipv4アドレスを、そのインターフェイスにのみバインドすることを示すものとして実際に扱っているのです。