Ralat Argumen Tidak Sah dengan Pelayan HTTP pada Soket TCP
Apabila membuat pelayan HTTP pada soket TCP dalam Go, anda mungkin menghadapi ralat mesej "terima tcp 127.0.0.1:80: terima: hujah tidak sah." Ralat ini boleh menunjukkan isu dengan persediaan soket.
Penciptaan Soket dengan Pengikatan VRF
Kod yang disediakan mencipta soket TCP menggunakan syscall.Socket dan cuba untuk mengikatnya kepada antara muka VRF. Pengikatan VRF diulas, menjadikan penciptaan soket teras dan proses pengikatan utuh.
Persediaan Pelayan HTTP
Net.FileListener dicipta menggunakan deskriptor fail soket. Operasi net.Listen selesai, tetapi memulakan pelayan HTTP menggunakan http.Serve membuang ralat "argumen tidak sah".
Kecacatan Soket?
Anda mungkin menganggap soket rosak, tetapi kemungkinan besar masalah dengan konfigurasi soket sebelum mengikat. Untuk menyelesaikan masalah ini, kami boleh menggunakan net.ListenConfig untuk memperhalusi pilihan soket.
Menggunakan net.ListenConfig
net.ListenConfig menyediakan cara untuk menyuntik soket tersuai pilihan sebelum memanggil syscall.Bind. Ia menjamin bahawa persediaan soket sejajar dengan jangkaan pakej bersih.
Fungsi Kawalan
Kaedah Kawalan ListenConfig membolehkan anda menentukan penutupan yang menyediakan akses kepada mentah deskriptor fail yang digunakan dalam persediaan soket. Dalam penutupan ini, anda boleh menggunakan pilihan soket yang diperlukan, seperti SO_BINDTODEVICE untuk pengikatan VRF.
Contoh
Berikut ialah contoh penggunaan net.ListenConfig untuk mengkonfigurasi soket sebelum 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>
Dengan menggunakan net.ListenConfig dan kaedah Kawalannya, anda boleh memastikan soket anda dikonfigurasikan dengan betul untuk keperluan khusus anda sebelum mengikatnya. Ini sepatutnya menyelesaikan ralat "hujah tidak sah" dan membolehkan anda berjaya memulakan pelayan HTTP pada soket TCP yang dikehendaki.
Atas ialah kandungan terperinci Apa yang Menyebabkan \'Ralat Argumen Tidak Sah\' Apabila Menggunakan Pelayan HTTP pada Soket TCP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!