mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-02-23 20:52:15 +08:00
chore: remove tfo windows support
Golang officially decided not to open `internal/poll.execIO` to third-party libraries after 1.23 was released, so we can only choose to remove tfo support on the Windows platform.
This commit is contained in:
parent
7eb70aeb4d
commit
d3fea909e9
@ -3,22 +3,10 @@ package inbound
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/metacubex/tfo-go"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
lc = tfo.ListenConfig{
|
|
||||||
DisableTFO: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func SetTfo(open bool) {
|
|
||||||
lc.DisableTFO = !open
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetMPTCP(open bool) {
|
func SetMPTCP(open bool) {
|
||||||
setMultiPathTCP(&lc.ListenConfig, open)
|
setMultiPathTCP(getListenConfig(), open)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListenContext(ctx context.Context, network, address string) (net.Listener, error) {
|
func ListenContext(ctx context.Context, network, address string) (net.Listener, error) {
|
||||||
|
23
adapter/inbound/listen_unix.go
Normal file
23
adapter/inbound/listen_unix.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//go:build unix
|
||||||
|
|
||||||
|
package inbound
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/metacubex/tfo-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
lc = tfo.ListenConfig{
|
||||||
|
DisableTFO: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetTfo(open bool) {
|
||||||
|
lc.DisableTFO = !open
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListenConfig() *net.ListenConfig {
|
||||||
|
return &lc.ListenConfig
|
||||||
|
}
|
15
adapter/inbound/listen_windows.go
Normal file
15
adapter/inbound/listen_windows.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package inbound
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
lc = net.ListenConfig{}
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetTfo(open bool) {}
|
||||||
|
|
||||||
|
func getListenConfig() *net.ListenConfig {
|
||||||
|
return &lc
|
||||||
|
}
|
@ -5,12 +5,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/metacubex/tfo-go"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var DisableTFO = false
|
|
||||||
|
|
||||||
type tfoConn struct {
|
type tfoConn struct {
|
||||||
net.Conn
|
net.Conn
|
||||||
closed bool
|
closed bool
|
||||||
@ -124,16 +120,3 @@ func (c *tfoConn) ReaderReplaceable() bool {
|
|||||||
func (c *tfoConn) WriterReplaceable() bool {
|
func (c *tfoConn) WriterReplaceable() bool {
|
||||||
return c.Conn != nil
|
return c.Conn != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dialTFO(ctx context.Context, netDialer net.Dialer, network, address string) (net.Conn, error) {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), DefaultTCPTimeout)
|
|
||||||
dialer := tfo.Dialer{Dialer: netDialer, DisableTFO: false}
|
|
||||||
return &tfoConn{
|
|
||||||
dialed: make(chan bool, 1),
|
|
||||||
cancel: cancel,
|
|
||||||
ctx: ctx,
|
|
||||||
dialFn: func(ctx context.Context, earlyData []byte) (net.Conn, error) {
|
|
||||||
return dialer.DialContext(ctx, network, address, earlyData)
|
|
||||||
},
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
25
component/dialer/tfo_unix.go
Normal file
25
component/dialer/tfo_unix.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//go:build unix
|
||||||
|
|
||||||
|
package dialer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/metacubex/tfo-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
const DisableTFO = false
|
||||||
|
|
||||||
|
func dialTFO(ctx context.Context, netDialer net.Dialer, network, address string) (net.Conn, error) {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), DefaultTCPTimeout)
|
||||||
|
dialer := tfo.Dialer{Dialer: netDialer, DisableTFO: false}
|
||||||
|
return &tfoConn{
|
||||||
|
dialed: make(chan bool, 1),
|
||||||
|
cancel: cancel,
|
||||||
|
ctx: ctx,
|
||||||
|
dialFn: func(ctx context.Context, earlyData []byte) (net.Conn, error) {
|
||||||
|
return dialer.DialContext(ctx, network, address, earlyData)
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
@ -1,11 +1,12 @@
|
|||||||
package dialer
|
package dialer
|
||||||
|
|
||||||
import "github.com/metacubex/mihomo/constant/features"
|
import (
|
||||||
|
"context"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
const DisableTFO = true
|
||||||
// According to MSDN, this option is available since Windows 10, 1607
|
|
||||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms738596(v=vs.85).aspx
|
func dialTFO(ctx context.Context, netDialer net.Dialer, network, address string) (net.Conn, error) {
|
||||||
if features.WindowsMajorVersion < 10 || (features.WindowsMajorVersion == 10 && features.WindowsBuildNumber < 14393) {
|
return netDialer.DialContext(ctx, network, address)
|
||||||
DisableTFO = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user