【发布时间】:2021-08-16 21:24:09
【问题描述】:
我正在使用 golang 编写脚本,在这部分代码中,我在这一行中遇到错误:
syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_NODELAY, 1)
具体来说:
int(fd)
var globalTr = &http.Transport{
MaxIdleConnsPerHost: 4096,
MaxIdleConns: 4096,
MaxConnsPerHost: 4096,
TLSHandshakeTimeout: 0 * time.Second,
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
DialContext: (&net.Dialer{
Control: func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, syscall.TCP_NODELAY, 1)
})
},
}).DialContext,
}
错误是:
cannot use int(fd) (value of type int) as syscall.Handle value in argument to syscall.SetsockoptInt
【问题讨论】:
-
syscall包是非常特定于平台的,因此您几乎应该始终只在具有正确构建约束的文件中使用它。代码看起来像是针对unix的,而错误来自windows。 -
请注意,如果您的唯一目标是设置
TCP_NODELAY,那么特定于平台的工作已经在TCPConn.SetNoDelay中为您完成 -
@JimB 我刚刚在 unix 环境中编译它,它工作得很好,我会接受的。谢谢
标签: go compiler-errors