首頁  >  文章  >  後端開發  >  在 Go 中在自訂 TCP 套接字上建立 HTTP 伺服器時如何解決「無效參數」錯誤?

在 Go 中在自訂 TCP 套接字上建立 HTTP 伺服器時如何解決「無效參數」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-24 18:09:02829瀏覽

How to Resolve

來自TCP 套接字的HTTP 服務器(Go 中)

問題:

創建HTTP使用自定義TCP 套接字在特定VRF 接口上的服務器會導致錯誤“接受tcp 127.0.0.1:80: 接受:無效參數。”

解決方案:

使用net.ListenConfig 注入套接字選項:

要解決此問題,請在呼叫syscall.Bind 之前使用net.ListenConfig 注入所需的套接字選項。這確保了套接字設定是根據 net 套件的規範執行的。

步驟:

  1. 定義一個帶有 Control 函數的 net.ListenConfig操作原始檔案描述符。
  2. 使用 Control 函數呼叫 syscall.SetsockoptString 來設定 VRF 介面綁定。
  3. 使用 ListenConfig 建立監聽器並處理 HTTP 請求。

程式碼範例:

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn