4 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
傳遞network
給Control
函數(shù)的是tcp4
IPv4 連接或tcp6
IPv6 連接(如果您正在建立傳出 TCP 連接)。
? ? ? ? // Network and address parameters passed to Control method are not
? ? ? ? // necessarily the ones passed to Dial. For example, passing "tcp" to Dial
? ? ? ? // will cause the Control function to be called with "tcp4" or "tcp6".
(在非 TCP 連接的情況下,其他字符串也是可能的。)
已知網(wǎng)絡(luò)是“tcp”、“tcp4”(僅限 IPv4)、“tcp6”(僅限 IPv6)、“udp”、“udp4”(僅限 IPv4)、“udp6”(僅限 IPv6)、“ip” 、“ip4”(僅限 IPv4)、“ip6”(僅限 IPv6)、“unix”、“unixgram”和“unixpacket”。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
哦。我自己解決了這個(gè)問題。
我們無法配置強(qiáng)制 ipv6 連接,因?yàn)樗怯簿幋a的
...
if cm.scheme() == "https" && t.DialTLS != nil {
? ? ? ? var err error
? ? ? ? pconn.conn, err = t.DialTLS("tcp", cm.addr())
? ? ? ? if err != nil {
? ? ? ? ? ? return nil, wrapErr(err)
? ? ? ? }
...
我為 transport.go 添加了一個(gè) ipv6only 標(biāo)志,一個(gè) getTcpString() 并且它有效。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
這適用于 go1.17.1:
var (
zeroDialer net.Dialer
httpClient = &http.Client{
Timeout: 10 * time.Second,
}
)
func init() {
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
return zeroDialer.DialContext(ctx, "tcp4", addr)
}
httpClient.Transport = transport
}

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
我認(rèn)為即使服務(wù)器正在偵聽“tcp6”,使用“tcp”運(yùn)行 net.Dial 的客戶端也應(yīng)該可以正常工作——在雙棧設(shè)置中。
當(dāng)我遇到這個(gè)問題時(shí),罪魁禍?zhǔn)资?/etc/hosts。它有一個(gè)主機(jī)條目,映射到 ipv4 地址而不是 ipv6 地址。這導(dǎo)致連接被拒絕。
我的測(cè)試示例如下:
客戶端代碼:
package main
import "net"
import "fmt"
func main() {
conn, err := net.Dial("tcp", "hostname:9876")
if err != nil {
fmt.Println("Error in net.Dial", err)
return
}
conn.Close()
fmt.Println("Successful")
}
服務(wù)器代碼:
package main
import "net"
import "fmt"
func main() {
lis, err := net.Listen("tcp6", ":9876")
if err != nil {
fmt.Println("Error in listen", err)
return
}
for {
_, err := lis.Accept()
if err != nil {
fmt.Println("Error in Accept", err)
return
}
}
}
這段代碼應(yīng)該可以在雙堆棧設(shè)置上與干凈的 /etc/hosts 文件一起正常工作。
謝謝。
- 4 回答
- 0 關(guān)注
- 814 瀏覽
添加回答
舉報(bào)