Export std net bind

This commit is contained in:
世界 2023-12-15 18:44:05 +08:00
parent a71256d250
commit 73f8c6542b
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
5 changed files with 129 additions and 39 deletions

View file

@ -6,8 +6,7 @@
package conn
import (
"net"
"syscall"
"github.com/sagernet/sing/common/control"
)
// UDP socket read/write buffer size (7MB). The value of 7MB is chosen as it is
@ -17,27 +16,6 @@ import (
// around this limitation)
const socketBufferSize = 7 << 20
// controlFn is the callback function signature from net.ListenConfig.Control.
// It is used to apply platform specific configuration to the socket prior to
// bind.
type controlFn func(network, address string, c syscall.RawConn) error
// controlFns is a list of functions that are called from the listen config
// that can apply socket options.
var controlFns = []controlFn{}
// listenConfig returns a net.ListenConfig that applies the controlFns to the
// socket prior to bind. This is used to apply socket buffer sizing and packet
// information OOB configuration for sticky sockets.
func listenConfig() *net.ListenConfig {
return &net.ListenConfig{
Control: func(network, address string, c syscall.RawConn) error {
for _, fn := range controlFns {
if err := fn(network, address, c); err != nil {
return err
}
}
return nil
},
}
}
var controlFns []control.Func