來自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中文網其他相關文章!