From 2b81fcef53b951540fe498bf28f839d3ae461894 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Wed, 13 Jan 2021 21:58:34 -0800 Subject: [PATCH] Add a read timeout when reading rtmp to handle connections that have dropped. Closes #564 --- core/rtmp/rtmp.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/rtmp/rtmp.go b/core/rtmp/rtmp.go index 1b9275150..90f24f49a 100644 --- a/core/rtmp/rtmp.go +++ b/core/rtmp/rtmp.go @@ -114,12 +114,23 @@ func HandleConn(c *rtmp.Conn, nc net.Conn) { break } + // If we don't get a readable packet in 10 seconds give up and disconnect + _rtmpConnection.SetReadDeadline(time.Now().Add(10 * time.Second)) pkt, err := c.ReadPacket() + + // Broadcaster disconnected if err == io.EOF { handleDisconnect(nc) break } + // Read timeout. Disconnect. + if neterr, ok := err.(net.Error); ok && neterr.Timeout() { + log.Debugln("Timeout reading the inbound stream from the broadcaster. Assuming that they disconnected and ending the stream.") + handleDisconnect(nc) + break + } + if err := w.WritePacket(pkt); err != nil { panic(err) }