TCP ソケット上の HTTP サーバーでの無効な引数エラー
Go で TCP ソケット上に HTTP サーバーを作成すると、エラーが発生する場合がありますメッセージ「accept tcp 127.0.0.1:80: accept: 引数が無効です。」このエラーは、ソケットのセットアップに問題があることを示している可能性があります。
VRF バインディングによるソケットの作成
提供されたコードは、syscall.Socket を使用して TCP ソケットを作成し、それをバインドしようとしますVRF インターフェイスに接続します。 VRF バインディングはコメント アウトされ、コア ソケットの作成およびバインディング プロセスはそのまま残ります。
HTTP サーバー セットアップ
ソケット ファイル記述子を使用して net.FileListener が作成されます。 net.Listen 操作は完了しましたが、http.Serve を使用して HTTP サーバーを開始すると、「無効な引数」エラーがスローされます。
Socket Defect?
ソケットに欠陥がありますが、バインド前のソケット構成に問題がある可能性が高くなります。これを解決するには、net.ListenConfig を使用してソケット オプションを微調整できます。
net.ListenConfig を使用する
net.ListenConfig は、カスタム ソケットを挿入する方法を提供します。 syscall.Bind を呼び出す前にオプションを設定します。これにより、ソケットのセットアップがネット パッケージの期待と一致していることが保証されます。
Control Function
ListenConfig の Control メソッドを使用すると、生のパッケージへのアクセスを提供するクロージャを指定できます。ソケットのセットアップで使用されるファイル記述子。このクロージャ内で、VRF バインディング用の SO_BINDTODEVICE など、必要なソケット オプションを適用できます。
例
次に、net.ListenConfig を使用してソケットを設定する例を示します。 binding:
<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>
net.ListenConfig とその Control メソッドを使用すると、ソケットをバインドする前に、特定のニーズに合わせてソケットが正しく構成されていることを確認できます。これにより、「無効な引数」エラーが解決され、目的の TCP ソケットで HTTP サーバーを正常に起動できるようになります。
以上がTCP ソケットで HTTP サーバーを使用するときに「無効な引数エラー」が発生する原因は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。