XHTTP client: Fix packet-up OpenUsage counting and H3 keepAlivePeriod parameter (#6140)

Fixes https://github.com/XTLS/Xray-core/pull/6140#issuecomment-4525409315
This commit is contained in:
风扇滑翔翼
2026-05-24 20:05:40 +08:00
committed by GitHub
parent ab69985fcc
commit 4c3842711d
+11 -7
View File
@@ -183,6 +183,8 @@ func createHTTPClient(dest net.Destination, streamSettings *internet.MemoryStrea
if quicParams.KeepAlivePeriod == 0 { if quicParams.KeepAlivePeriod == 0 {
if keepAlivePeriod == 0 { if keepAlivePeriod == 0 {
quicConfig.KeepAlivePeriod = net.QuicgoH3KeepAlivePeriod quicConfig.KeepAlivePeriod = net.QuicgoH3KeepAlivePeriod
} else if keepAlivePeriod > 0 {
quicConfig.KeepAlivePeriod = keepAlivePeriod
} }
} }
if quicParams.MaxIncomingStreams == 0 { if quicParams.MaxIncomingStreams == 0 {
@@ -506,6 +508,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
var seq int64 var seq int64
var lastWrite time.Time var lastWrite time.Time
dynamicHTTPClient := httpClient
dynamicXmuxClient := xmuxClient
for { for {
// by offloading the uploads into a buffered pipe, multiple conn.Write // by offloading the uploads into a buffered pipe, multiple conn.Write
// calls get automatically batched together into larger POST requests. // calls get automatically batched together into larger POST requests.
@@ -540,13 +544,13 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
lastWrite = time.Now() lastWrite = time.Now()
if xmuxClient != nil && (xmuxClient.LeftRequests.Add(-1) <= 0 || if dynamicXmuxClient != nil && (dynamicXmuxClient.LeftRequests.Add(-1) <= 0 ||
(xmuxClient.UnreusableAt != time.Time{} && lastWrite.After(xmuxClient.UnreusableAt))) { (dynamicXmuxClient.UnreusableAt != time.Time{} && lastWrite.After(dynamicXmuxClient.UnreusableAt))) {
httpClient, xmuxClient = getHTTPClient(ctx, dest, streamSettings) dynamicHTTPClient, dynamicXmuxClient = getHTTPClient(ctx, dest, streamSettings)
} }
go func() { go func(hClient DialerClient) {
err := httpClient.PostPacket( err := hClient.PostPacket(
ctx, ctx,
requestURL.String(), requestURL.String(),
sessionId, sessionId,
@@ -559,9 +563,9 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
uploadPipeReader.Interrupt() uploadPipeReader.Interrupt()
doSplit.Store(false) doSplit.Store(false)
} }
}() }(dynamicHTTPClient)
if _, ok := httpClient.(*DefaultDialerClient); ok { if _, ok := dynamicHTTPClient.(*DefaultDialerClient); ok {
<-wroteRequest.Wait() <-wroteRequest.Wait()
} }
} }