Pelayan HTTP daripada Soket TCP dalam Go: Menyelesaikan masalah Ralat "Terima: Argumen Tidak Sah"
Isu ini timbul apabila cuba mencipta HTTP pelayan pada soket TCP dalam antara muka VRF tertentu. Walaupun mengikat soket ke VRF dengan betul, memulakan pelayan HTTP menghasilkan ralat yang menunjukkan "accept tcp 127.0.0.1:80: accept: invalid argument."
Memahami Masalah
Ralat ini menunjukkan bahawa konfigurasi soket mungkin tidak betul atau rosak. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengikatan VRF tidak secara langsung menyebabkan masalah tetapi hanya disertakan dalam kod yang disediakan untuk konteks.
Resolusi
Untuk menyelesaikan masalah ini isu, adalah perlu untuk memastikan bahawa soket dikonfigurasikan dengan betul mengikut keperluan pakej bersih. Net.ListenConfig boleh digunakan untuk menentukan pilihan soket yang dikehendaki sebelum memanggil syscall.Bind.
Contoh Kod
Kod berikut menunjukkan penggunaan net.ListenConfig untuk selesaikan isu konfigurasi soket:
<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>
Penjelasan
Fungsi ListenConfig.Control menyediakan akses kepada syscall.RawConn, yang membenarkan manipulasi deskriptor fail asas sebelum pengikatan soket sebenar dilakukan. Fungsi Kawalan digunakan dengan penutupan yang menentukan pilihan soket yang diingini, dalam kes ini, mengikat antara muka VRF tertentu.
Dengan menggunakan ListenConfig, proses konfigurasi soket disegerakkan dengan betul dengan jangkaan rangkaian pakej, memastikan soket disediakan dengan betul untuk operasi pelayan HTTP.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Terima: Argumen Tidak Sah\' Semasa Mencipta Pelayan HTTP pada Soket TCP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!