Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat \'invalid argument\' Semasa Mencipta Pelayan HTTP daripada Soket TCP dalam Go?

Bagaimana untuk Menyelesaikan Ralat \'invalid argument\' Semasa Mencipta Pelayan HTTP daripada Soket TCP dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-25 04:47:02570semak imbas

How to Resolve 'invalid argument' Error When Creating HTTP Server from TCP Socket in Go?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn