来自 TCP 套接字的 HTTP 服务器(Go 中)
问题:
创建 HTTP使用自定义 TCP 套接字在特定 VRF 接口上的服务器会导致错误“接受 tcp 127.0.0.1:80: 接受:无效参数。”
解决方案:
使用 net.ListenConfig 注入套接字选项:
要解决此问题,请在调用 syscall.Bind 之前使用 net.ListenConfig 注入所需的套接字选项。这确保了套接字设置是根据 net 包的规范执行的。
步骤:
代码示例:
<code class="go">func main() { lc := net.ListenConfig{Control: controlOnConnSetup} ln, err := lc.Listen(context.Background(), "tcp", "127.0.0.1:80") if err != nil { log.Fatal(err) } ln.Close() } func controlOnConnSetup(network string, address string, c syscall.RawConn) error { var operr error fn := func(fd uintptr) { operr = syscall.SetsockoptString(int(fd), syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, "vrfiface") } if err := c.Control(fn); err != nil { return err } if operr != nil { return operr } return nil }</code>
此方法允许在将套接字绑定到 IP 地址和端口之前添加自定义套接字选项,解决了创建套接字时遇到的问题特定 VRF 接口上的 HTTP 服务器。
以上是在 Go 中在自定义 TCP 套接字上创建 HTTP 服务器时如何解决'无效参数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!