Thanks for your reply. I agree that SO_LINGER is not the recommended
way of getting
round the TIME_WAIT state. I had a closer look at the RTSP server
code and realized that
the SO_REUSEADDR option is turned off at the server socket in
RTSPServer::setUpOurSocket()
and that is why the server cannot be restarted.
If I set the option by removing the creation of the dummy NoReuse
object, then the server can
bind again to the same port straight away as expected. Is
SO_REUSEADDR turned off just to avoid
data corruption (e.g. there is a remote possibility of data that is
hanging around from the old
dead connection to be inserted to the new TCP stream after the
server is restarted)?
No, SO_REUSEADDR (and SO_REUSEPORT) is turned off for the server for
a very simple reason: We can't have more than one server on the same
host using the same port at the same time! I.e., we don't want to
start a RTSP server on port 554 (for example) if the computer already
has a server running with that port. Similarly for the HTTP port
(for RTSP-over-HTTP tunneling, or HTTP Live Streaming): We can't have
the server use a HTTP port if there's already a HTTP server running
with that port. (That's why our code tries several different HTTP
port numbers in succession: 80, then 8000, then 8080.)
So, in conclusion: Don't change the code. If you end up having to
<control>-C a server, then just be patient and wait a few seconds
before starting it up again.
--
Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel