Ticket #2122 (new bug)
Opened 11 months ago
lt1.6: Now supports port re-use via two simple flags
|Reported by:||bmnot||Owned by:|
|Component:||other||Version:||other (please specify)|
|Keywords:||single port bind socket reuse||Cc:|
Currently, setting up Deluge to use a single port is very unreliable (that is, disabling random incoming port, and setting a port range of something like "52100 to 52100").
The issue is that re-starting the daemon will most often lead to the desired port being in use and a new random one chosen by the system.
The reason is that when a program frees up a port on Linux, it doesn't get immediately freed. It goes into a TIME_WAIT state, where it is available for fast re-binding in case an application changes its mind and wants it again. It's not fully killed off until a few seconds later.
To re-bind on the same port, Deluge will have to use libtorrent 1.6, which finally supports the TCP socket options to re-use the same port even if it's in the TIME_WAIT state, as well as a new option that refuses to bind if the desired port is in use (rather than choosing a random port).
It's described at http://code.google.com/p/libtorrent/issues/detail?id=305 but basically works as follows:
When migrated to lt 0.16, always use the session::listen_reuse_address flag to ensure it is allowed to re-use a TIME_WAIT port. if random_port == false && from_port == to_port, use the session::listen_no_system_port flag too to ensure that the system cannot change the desired port from what you wanted. If we could not bind the single port we wanted, kill the daemon and log a fatal error saying "port in use".