feat: add stateless UDP forwarding mode (#853)
Add stateless=true metadata option to UDP listener/handler for raw datagram forwarding without per-client session tracking, similar to NGINX Stream Module behavior. - udp.NewListener: add Stateless field to ListenConfig; branch in NewListener/Accept to skip connPool/listenLoop when stateless - datagramConn: lightweight net.Conn+PacketConn wrapping a single UDP datagram — no channels, mutexes, or pool logic - forward handler: add handleRawDatagram for single request-response cycle; extract dialTarget to share hop selection/dial/proxyproto preamble with handleRawForwarding Usage: gost -L "udp://:10000/127.0.0.1:2000?stateless=true"
This commit is contained in:
@@ -76,6 +76,7 @@ func (l *udpListener) Init(md md.Metadata) (err error) {
|
||||
ReadBufferSize: l.md.readBufferSize,
|
||||
Keepalive: l.md.keepalive,
|
||||
TTL: l.md.ttl,
|
||||
Stateless: l.md.stateless,
|
||||
Logger: l.logger,
|
||||
})
|
||||
return
|
||||
|
||||
@@ -20,6 +20,7 @@ type metadata struct {
|
||||
backlog int
|
||||
keepalive bool
|
||||
ttl time.Duration
|
||||
stateless bool
|
||||
}
|
||||
|
||||
func (l *udpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
@@ -43,5 +44,7 @@ func (l *udpListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
l.md.readQueueSize = defaultReadQueueSize
|
||||
}
|
||||
|
||||
l.md.stateless = mdutil.GetBool(md, "stateless")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user