Go 中TCP 套接字的HTTP 伺服器:解決「接受:無效參數」錯誤
嘗試建立HTTP 時會出現此問題伺服器位於特定VRF 介面內的TCP 套接字上。儘管正確地將套接字綁定到VRF,啟動HTTP 伺服器會導致錯誤,指示「接受tcp 127.0.0.1:80: 接受:無效參數。」
理解問題
此錯誤表示套接字配置可能不正確或有缺陷。但是,需要注意的是,VRF 綁定並不會直接導致問題,而只是包含在提供的上下文程式碼中。
解決方案
解決此問題問題,需要確保socket按照net包的要求正確配置。 net.ListenConfig 可用於在呼叫 syscall.Bind 之前指定所需的套接字選項。
程式碼範例
以下程式碼示範了net.ListenConfig 的使用解決套接字設定問題:
<code class="go">import ( "context" "fmt" "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) } // ... Do something with the listener 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>
說明
ListenConfig.Control 函數提供對syscall.RawConn 的訪問,它允許在先前操作底層檔案描述符執行實際的套接字綁定。透過指定所需套接字選項的閉包來呼叫控制函數,在本例中,綁定到特定的 VRF 介面。
透過利用 ListenConfig,套接字配置過程與網路的期望正確同步包,確保正確設定套接字以進行 HTTP 伺服器操作。
以上是在 Go 中在 TCP 套接字上建立 HTTP 伺服器時如何解決「接受:無效參數」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!