Go言語のhttp.ListenAndServeでIPv6で待ち受けてしまう問題

golang Golang

Go言語でIPv6ではなくIPv4でhttp通信を待ち受けたい

環境

go version go1.21.5 windows/amd64

起きた問題

go http.ListenAndServe(":8080", nil)

このような書き方でhttp通信を立ち上げたところIPv6でのみサーブされ、他プロセスから繋げませんでした

sudo lsof -i :8080
COMMAND       PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
hoge 2494704 fuga    7u  IPv6 xxxxxxxx      0t0  TCP *:8080 (LISTEN)

どうにも:8080の場合v4とv6のどちらを使うかはosの設定に依存するようです

0.0.0.0:8080で起動するという対処法も出てきたのですが、上手く行かず

対処法

netライブラリでtcp4を呼び出しました

ln, err := net.Listen("tcp4", "0.0.0.0:8080")
if err != nil {
    log.Fatal(err)
}

go http.Serve(ln, nil)

これで一件落着

コメント

タイトルとURLをコピーしました