Go 컨텍스트가 SOCKS 연결 설정을 취소하도록 하기
Go SOCKS 경로에 내보낸 ContextDialer 인터페이스를 사용하고 연결 취소와 이후 애플리케이션 트래픽의 기한을 구분합니다.
func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
dialer, err := proxy.SOCKS5(
"tcp",
"127.0.0.1:1080",
nil,
&net.Dialer{Timeout: 5 * time.Second},
)
if err != nil {
return nil, err
}
contextDialer, ok := dialer.(proxy.ContextDialer)
if !ok {
return nil, errors.New("SOCKS dialer lacks context support")
}
return contextDialer.DialContext(ctx, "tcp", destination)
}기존 Go 네트워킹 패키지 안에서 context, errors, net, time, x/net/proxy 임포트를 사용합니다. nil 인수는 SOCKS 자격 증명을 선택하지 않습니다. 허용된 공개 프록시 경로의 공개 대상에 대해 SOCKS5 프록시 목록이 dialer의 엔드포인트 후보를 제공합니다.
내보낸 proxy.ContextDialer 단언은 지원되지 않는 구현을 명시적으로 실패하게 만듭니다. 내부 dialer 유형을 지목하거나 호출자가 관리할 수 없는 블로킹 goroutine을 시작하는 대신 배포된 의존성을 확인하십시오.
컨텍스트는 연결 설정을 제어합니다. net.Conn이 반환된 후에는 적절한 읽기/쓰기 기한이나 상위 수준 요청 기한을 적용합니다. 기본 dialer의 연결 타임아웃과 애플리케이션의 전체 예산은 서로 다른 한도입니다.
HTTP 전송 통합에서는 정상적인 TLS 및 HTTP 동작을 유지합니다. 반환된 컨텍스트 인식 SOCKS 스트림은 전송 계층으로의 인계이며, 응답도 아니고 이후 모든 바이트에 대한 수명 정책도 아닙니다.