TCP 소켓의 HTTP 서버(Go) 잘못된 인수 문제
TCP 소켓을 사용하여 HTTP 서버를 생성하려고 합니다. 가다. 소켓을 VRF 인터페이스에 성공적으로 바인딩했지만 HTTP 서버를 시작할 때 "accept tcp 127.0.0.1:80: accept:잘못된 인수"라는 오류가 발생합니다.
해결책
오류는 소켓에 결함이 있거나 잘못 생성되었을 수 있음을 나타냅니다. 이 문제를 해결하려면 net.ListenConfig를 사용하여 소켓을 바인딩하기 전에 소켓 옵션을 지정할 수 있습니다. 이렇게 하면 net 패키지에서 예상한 대로 소켓이 올바르게 설정됩니다.
ListenConfig.Control 함수를 사용하면 Control 소켓 설정에 사용되는 파일 설명자에 대한 액세스를 제공하는 syscall.RawConn 클로저의 메서드입니다. 예는 다음과 같습니다.
<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>
controlOnConnSetup 함수는 소켓이 바인딩되기 전에 SO_BINDTODEVICE 소켓 옵션을 "vrfiface"로 설정합니다. 이렇게 하면 소켓이 지정된 VRF 인터페이스에 바인딩됩니다.
이렇게 변경한 후에는 "잘못된 인수" 오류 없이 HTTP 서버를 성공적으로 시작할 수 있습니다.위 내용은 Go의 TCP 소켓에서 HTTP 서버를 생성할 때 \'잘못된 인수\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!