diff --git a/rtp/session.go b/rtp/session.go index 00afaae..7028c05 100644 --- a/rtp/session.go +++ b/rtp/session.go @@ -53,7 +53,7 @@ func NewSession(host string) (rs *Session, err error) { sock := conn.(*net.UDPConn) c := make(chan *Frame) r := make(chan *Frame) - e := make(chan error, 1) + e := make(chan error) go receiver(sock, c, e, r) return &Session{ C: c, @@ -104,6 +104,7 @@ func (rs *Session) CloseAfterError() { rs.Sock.Close() rs.Sock = nil close(rs.R) + <-rs.E } func receiver(sock *net.UDPConn, c chan<- *Frame, e chan<- error, r <-chan *Frame) { @@ -112,6 +113,7 @@ func receiver(sock *net.UDPConn, c chan<- *Frame, e chan<- error, r <-chan *Fram for { amt, _, err := sock.ReadFrom(buf) if err != nil { + close(c) e <- err break } @@ -136,7 +138,6 @@ func receiver(sock *net.UDPConn, c chan<- *Frame, e chan<- error, r <-chan *Fram c <- frame frame = <-r } - close(c) close(e) }