>  기사  >  백엔드 개발  >  Go에서 사용자 정의 TCP 소켓에 HTTP 서버를 생성할 때 \'잘못된 인수\' 오류를 해결하는 방법은 무엇입니까?

Go에서 사용자 정의 TCP 소켓에 HTTP 서버를 생성할 때 \'잘못된 인수\' 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-24 18:09:02920검색

How to Resolve

TCP 소켓의 HTTP 서버(Go에서)

문제:

HTTP 생성 사용자 정의 TCP 소켓을 사용하는 특정 VRF 인터페이스의 서버에서 "accept tcp 127.0.0.1:80: accept:잘못된 인수"라는 오류가 발생합니다.

해결책:

net.ListenConfig를 사용한 소켓 옵션 삽입:

이 문제를 해결하려면 syscall.Bind를 호출하기 전에 net.ListenConfig를 사용하여 원하는 소켓 옵션을 삽입하세요. 이렇게 하면 넷 패키지의 사양에 따라 소켓 설정이 수행됩니다.

단계:

  1. 제어 기능이 있는 net.ListenConfig를 정의하여 다음을 수행합니다. 원시 파일 설명자를 조작합니다.
  2. Control 함수를 사용하여 syscall.SetsockoptString을 호출하여 VRF 인터페이스 바인딩을 설정합니다.
  3. ListenConfig를 사용하여 리스너를 생성하고 HTTP 요청을 처리합니다.

코드 샘플:

<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>

이 접근 방식을 사용하면 소켓을 IP 주소 및 포트에 바인딩하기 전에 사용자 정의 소켓 옵션을 추가할 수 있어 소켓 생성 시 발생하는 문제를 해결할 수 있습니다. 특정 VRF 인터페이스의 HTTP 서버.

위 내용은 Go에서 사용자 정의 TCP 소켓에 HTTP 서버를 생성할 때 \'잘못된 인수\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.