来自 TCP 套接字的 HTTP 服务器(在 Go 中)参数无效的问题
您正在尝试使用 TCP 套接字创建 HTTP 服务器去。您已成功将套接字绑定到 VRF 接口,但启动 HTTP 服务器时遇到错误:“accept tcp 127.0.0.1:80:accept: invalid argument.”
解决办法
该错误表明套接字可能有缺陷或创建不正确。要解决此问题,您可以在绑定套接字之前使用 net.ListenConfig 指定套接字选项。这可以确保套接字设置正确,正如 net 包所期望的那样。
ListenConfig.Control 函数允许您调用 Controlsyscall.RawConn 闭包上的🎜> 方法,它使您可以访问套接字设置中使用的文件描述符。下面是一个示例:
<code class="go">package main import ( "context" "log" "net" "syscall" ) 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>
controlOnConnSetup 函数在绑定套接字之前将 SO_BINDTODEVICE 套接字选项设置为“vrfiface”。这可确保套接字绑定到指定的 VRF 接口。
进行此更改后,您应该能够成功启动 HTTP 服务器,而不会遇到“无效参数”错误。以上是在 Go 中从 TCP 套接字创建 HTTP 服务器时如何解决'无效参数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!