Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-10-25 04:47:02
asal
673 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan