Set timeout for client disconnection
This commit is contained in:
		| @@ -98,9 +98,24 @@ func (s *Stream) handleBroadcaster(c *rtmp.Conn, nc net.Conn) { | |||||||
| 	// Ensure cleanup | 	// Ensure cleanup | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		// Ensure all clients have been removed | 		// Ensure all clients have been removed | ||||||
|  | 		ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) | ||||||
|  | 		defer cancel() | ||||||
|  |  | ||||||
| 		for len(s.Clients) > 0 { | 		for len(s.Clients) > 0 { | ||||||
| 			time.Sleep(200 * time.Millisecond) | 			select { | ||||||
|  | 			case <-ctx.Done(): | ||||||
|  | 				// Timed out while waiting for clients to disconnect, log and remove stream. | ||||||
|  | 				s.server.RemoveStream(s) | ||||||
|  | 				s.server.Logger.Errorw("Timeout while waiting for clients to disconnect from stream.", | ||||||
|  | 					"stream_name", s.Name, | ||||||
|  | 					"stream_duration", time.Since(s.startTime), | ||||||
|  | 					"bytes_received", humanize.Bytes(s.bytesReceived.Load())) | ||||||
|  | 				return | ||||||
|  | 			default: | ||||||
|  | 				time.Sleep(200 * time.Millisecond) | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// Once all clients have been removed, remove stream from server | 		// Once all clients have been removed, remove stream from server | ||||||
| 		s.server.RemoveStream(s) | 		s.server.RemoveStream(s) | ||||||
| 		s.server.Logger.Infow("Stream has been successfully stopped.", | 		s.server.Logger.Infow("Stream has been successfully stopped.", | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ package dogtamer | |||||||
|  |  | ||||||
| import "fmt" | import "fmt" | ||||||
|  |  | ||||||
| const Version string = "v0.1.6" | const Version string = "v0.1.7" | ||||||
|  |  | ||||||
| var Build string | var Build string | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user