Reusing a port after a crash
Philip Hallstrom
freebsd at philip.pjkh.com
Thu Apr 21 13:03:41 PDT 2005
>> From time to time, my torrent filesharing application will crash or need
> to be killed. The application is configured to listen on a specific port. If
> I try to restart the application after improper termination, I receive a
> fatal error message stating that the port is already in use.
>
> Before restarting the application, I verify that the application did indeed
> shut down (via 'ps -aux') and 'sockstat -l' shows that no application is
> using the port in question, so I don't understand how the port could still be
> 'in use'.
>
> The only way I've found to restart the application after improper termination
> is to reboot the whole system. Is there something else I could try? Does
> this kind of thing tend to happen to network applications when they crash or
> could this be specific to my application?
What little tinkering I've done in the socket world reminds me of this:
--------------------------------------------------------------
% man setsockopt
...
SO_REUSEADDR enables local address reuse
SO_REUSEPORT enables duplicate address and port bindings
...
SO_REUSEADDR indicates that the rules used in validating addresses sup-
plied in a bind(2) call should allow reuse of local addresses.
SO_REUSEPORT allows completely duplicate bindings by multiple processes
if they all set SO_REUSEPORT before binding the port. This option per-
mits multiple instances of a program to each receive UDP/IP multicast or
broadcast datagrams destined for the bound port.
--------------------------------------------------------------
Basically, what I remember about this is that if you supply those options
when creating the socket and your app crashes, you can start it back up
using the same host:port otherwise you get the message you're getting...
I'm sure a good networking would be able to explain it better...
More information about the freebsd-questions
mailing list