<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class="">Explanation.<br class="">- When RTSPServer::RTSPClientSession is created livenessTimeoutTask() is scheduled and it gets rescheduled while connection is on.<br class="">- 60 seconds after connection is closed livenessTimeoutTask() is executed. It will delete clientSession, which will call reclaimStreamStates(), which deletes stream. Eventually RTPInterface::removeStreamSocket() gets called with file descriptor from connection #2<br class="">- At that time this file descriptor belongs to connection #3</div></blockquote><div><br class=""></div>Right now I don’t see how this can be happening, because the only way connection #3 could be using the same socket number as connection #2 would be if that socket were previously closed - and I don’t see how the socket can be closed while an existing “RTSPClientConnection” has it.</div><div><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">I assume that it is not expected that RTSPClientSession outlives RTSPClientConnection</div></blockquote><div><br class=""></div>No, you assume incorrectly :-)  A ‘client session’ and a ‘client connection’ are independent.  The RTSP specification allows a single ‘client session’ to use multiple TCP connections (e.g., to use a separate TCP connection for each RTSP command that it sends), and it also allows a single TCP connection to be used for more than one RTSP ‘client session’ (either sequentially, or concurrently).  Admittedly, both of these things are uncommon, but they are permitted, which is why we make “RTSPClientConnection”s  and “RTSPClientSession”s independent.</div><div><br class=""></div><div>As always, I assume that you’re using a recent version of the code.  (Several bugs related to RTP/RTCP-over-TCP streaming were fixed in recent years.)</div><br class=""><div apple-content-edited="true" class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  ">Ross Finlayson<br class="">Live Networks, Inc.<br class=""><a href="http://www.live555.com/" class="">http://www.live555.com/</a></span></span>
</div>
<br class=""></body></html>