In live555 release 0.18 (1st July 2007), I have occassional found that the server can "appear" to lock up when streaming RTP over TCP. After much analysis I think I have traced the problem to the tcpReaderHandler method in RTP_Interface.cpp.
Specifically lines 332 to 337 do { if (readSocket(env, socketNum, &c, 1, fromAddress) != 1) { // error reading TCP socket env.taskScheduler().turnOffBackgroundReadHandling(socketNum); // stops further calls to us return; } } while (c != '$'); The problem is that the readSocket() function can block and will block if the next (and last) character to read is not a '$'. That is the function gets 'tcpReadHandler' gets called from the scheduler because there is something to read. The function reads the characters and that could be some RTSP command from the client which is discarded (I'm happy with that) but if there is no '$' then we are stuck in that do while loop forever (no return back to the scheduler) until the socket dies. My suggested solution is to pass a timeout to the readSocket() of 0 seconds (as opposed to the default of NULL - i.e. infinity) something like so: struct timeval wait; wait.tv_sec = 0; wait.tv_usec = 0; do { int retval = readSocket(env, socketNum, &c, 1, fromAddress, &wait); if(retVal != 1) { // error reading TCP socket if(retVal < 0) { env.taskScheduler().turnOffBackgroundReadHandling(socketNum); // stops further calls to us } return; } } while (c != '$'); This will make sure that if there is nothing left to read then at least the function will return. P.S. I've using real-player as the client so you may say that's a bad idea, but I think the above change should be done? regards Peter lines __________________________________________________ Tiscali Broadband only £7.99 a month for your first 3 months! http://www.tiscali.co.uk/products/broadband/ _______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel