TCP ソケットからの HTTP サーバー (Go 内)
問題:
HTTP の作成カスタム TCP ソケットを使用して特定の VRF インターフェイス上のサーバーを実行すると、エラー「accept tcp 127.0.0.1:80: accept: valid argument.」が発生します。
解決策:
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 中国語 Web サイトの他の関連記事を参照してください。