Simple profile event-loop blocking, packet loss
When librist receives an RTCP packet in Simple profile, poll()
indicates that the RTCP socket is ready, but librist seems to usually issue two recvfrom()
calls against the RTCP socket. Since the socket is configured in blocking-mode, while the the first call will immediately produce the packet which was waiting, the second call will then block until the sender provides another RTCP packet. While this recvfrom()
is blocked, the event loop is not receiving packets from the RTP socked, leading to packet loss if the data rate is high enough to overflow the socket receive buffer in the kernel.
In my testing this leads to a high rate of unrecoverable errors.