Improve URLTest delay calculate

This commit is contained in:
世界 2023-09-23 20:26:20 +08:00
parent d4d49d9df5
commit 61ac141124
No known key found for this signature in database
GPG key ID: CD109927C34A63C4

View file

@ -8,6 +8,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/sagernet/sing/common"
M "github.com/sagernet/sing/common/metadata" M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network" N "github.com/sagernet/sing/common/network"
) )
@ -96,33 +97,25 @@ func URLTest(ctx context.Context, link string, detour N.Dialer) (t uint16, err e
return return
} }
defer instance.Close() defer instance.Close()
if earlyConn, isEarlyConn := common.Cast[N.EarlyConn](instance); isEarlyConn && earlyConn.NeedHandshake() {
start = time.Now()
}
req, err := http.NewRequest(http.MethodHead, link, nil) req, err := http.NewRequest(http.MethodHead, link, nil)
if err != nil { if err != nil {
return return
} }
req = req.WithContext(ctx) client := http.Client{
Transport: &http.Transport{
transport := &http.Transport{ DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
Dial: func(string, string) (net.Conn, error) {
return instance, nil return instance, nil
}, },
// from http.DefaultTransport },
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
client := http.Client{
Transport: transport,
CheckRedirect: func(req *http.Request, via []*http.Request) error { CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse return http.ErrUseLastResponse
}, },
} }
defer client.CloseIdleConnections() defer client.CloseIdleConnections()
resp, err := client.Do(req.WithContext(ctx))
resp, err := client.Do(req)
if err != nil { if err != nil {
return return
} }