Go の TCP ソケットからの HTTP サーバー:「Accept: Invalid Argument」エラーのトラブルシューティング
この問題は、HTTP を作成しようとすると発生します。特定の VRF インターフェイス内の TCP ソケット上のサーバー。ソケットを VRF に正しくバインドしているにもかかわらず、HTTP サーバーを起動すると、「accept tcp 127.0.0.1:80: accept: valid argument.」というエラーが表示されます。
問題の理解
このエラーは、ソケットの構成が間違っているか、欠陥がある可能性があることを示唆しています。ただし、VRF バインディングが問題の直接の原因ではなく、コンテキスト用に提供されたコードに含まれているだけであることに注意することが重要です。
解決策
これを解決するにはこの問題を解決するには、ソケットがネット パッケージの要件に従って正しく構成されていることを確認する必要があります。 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 へのアクセスを提供します。これにより、基になるファイル記述子の操作が可能になります。実際のソケットバインディングが実行されます。 Control 関数は、目的のソケット オプションを指定するクロージャで呼び出されます。この場合、特定の VRF インターフェイスにバインドされます。
ListenConfig を利用することで、ソケット設定プロセスはネットの期待と適切に同期されます。パッケージを使用して、ソケットが HTTP サーバー操作用に正しく設定されていることを確認します。
以上がGo で TCP ソケットに HTTP サーバーを作成するときに発生する「Accept: Invalid Argument」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。