Pelayan HTTP daripada Soket TCP (dalam Go) Masalah dengan hujah tidak sah
Anda cuba mencipta pelayan HTTP menggunakan soket TCP dalam Pergi. Anda telah berjaya mengikat soket ke antara muka VRF, tetapi apabila anda memulakan pelayan HTTP, anda menghadapi ralat: "accept tcp 127.0.0.1:80: accept: invalid argument."
Penyelesaian
Ralat menunjukkan bahawa soket mungkin rosak atau tersalah cipta. Untuk menyelesaikan isu ini, anda boleh menggunakan net.ListenConfig untuk menentukan pilihan soket sebelum mengikat soket. Ini memastikan soket disediakan dengan betul, seperti yang dijangkakan oleh pakej net.
Fungsi ListenConfig.Control membolehkan anda memanggil Control kaedah pada penutupan syscall.RawConn, yang memberi anda akses kepada deskriptor fail yang digunakan dalam persediaan soket. Berikut ialah contoh:
<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>
Dalam contoh ini, fungsi controlOnConnSetup menetapkan pilihan soket SO_BINDTODEVICE kepada "vrfiface" sebelum soket diikat. Ini memastikan bahawa soket terikat pada antara muka VRF yang ditentukan.
Selepas membuat perubahan ini, anda sepatutnya berjaya memulakan pelayan HTTP anda tanpa menghadapi ralat "argumen tidak sah".
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'invalid argument\' Semasa Mencipta Pelayan HTTP daripada Soket TCP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!