mirror of
https://github.com/livekit/livekit.git
synced 2026-03-30 17:45:40 +00:00
detect UDP buffer size w/o using original conn.
if we get FD on the mux connection, the connection will be set to blocking mode and then hang when stopping
This commit is contained in:
@@ -89,20 +89,15 @@ func NewWebRTCConfig(conf *config.RTCConfig, externalIP string) (*WebRTCConfig,
|
||||
UDPConn: udpMuxConn,
|
||||
})
|
||||
s.SetICEUDPMux(udpMux)
|
||||
|
||||
fd, err := udpMuxConn.File()
|
||||
val, err := checkUDPReadBuffer()
|
||||
if err == nil {
|
||||
value, err := syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
|
||||
if err == nil {
|
||||
if value < minUDPBufferSize {
|
||||
logger.Warnw("UDP receive buffer is too small for a production set-up", nil,
|
||||
"current", value,
|
||||
"suggested", minUDPBufferSize)
|
||||
} else {
|
||||
logger.Debugw("UDP receive buffer size", "current", value)
|
||||
}
|
||||
if val < minUDPBufferSize {
|
||||
logger.Warnw("UDP receive buffer is too small for a production set-up", nil,
|
||||
"current", val,
|
||||
"suggested", minUDPBufferSize)
|
||||
} else {
|
||||
logger.Debugw("UDP receive buffer size", "current", val)
|
||||
}
|
||||
_ = fd.Close()
|
||||
}
|
||||
} else if conf.ICEPortRangeStart != 0 && conf.ICEPortRangeEnd != 0 {
|
||||
if err := s.SetEphemeralUDPPortRange(uint16(conf.ICEPortRangeStart), uint16(conf.ICEPortRangeEnd)); err != nil {
|
||||
@@ -145,3 +140,19 @@ func NewWebRTCConfig(conf *config.RTCConfig, externalIP string) (*WebRTCConfig,
|
||||
TCPMuxListener: tcpListener,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func checkUDPReadBuffer() (int, error) {
|
||||
conn, err := net.ListenUDP("udp4", nil)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer func() { _ = conn.Close() }()
|
||||
_ = conn.SetReadBuffer(minUDPBufferSize)
|
||||
fd, err := conn.File()
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
}
|
||||
defer func() { _ = fd.Close() }()
|
||||
|
||||
return syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user