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) }