TCP ソケットからの HTTP サーバー (Go) 無効な引数の問題
で TCP ソケットを使用して HTTP サーバーを作成しようとしています。行く。ソケットを VRF インターフェイスに正常にバインドしましたが、HTTP サーバーを起動すると、「accept tcp 127.0.0.1:80: accept: valid argument.」というエラーが発生します。
解決策
このエラーは、ソケットに欠陥があるか、正しく作成されていない可能性があることを示しています。この問題を解決するには、ソケットをバインドする前に net.ListenConfig を使用してソケット オプションを指定します。これにより、net パッケージの期待どおりにソケットが正しく設定されることが保証されます。
ListenConfig.Control 関数を使用すると、Controlsyscall.RawConn クロージャの 🎜> メソッド。これにより、ソケットのセットアップで使用されるファイル記述子にアクセスできます。以下に例を示します。
<code class="go">package main import ( "context" "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) } 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>
controlOnConnSetup 関数は、ソケットがバインドされる前に SO_BINDTODEVICE ソケット オプションを「vrfiface」に設定します。これにより、ソケットが指定された VRF インターフェイスに確実にバインドされます。
この変更を加えた後は、「無効な引数」エラーが発生することなく HTTP サーバーを正常に起動できるようになります。以上がGoでTCPソケットからHTTPサーバーを作成する際の「無効な引数」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。