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...

Thanks! That's what I needed to know. I didn't know such options existed.


I poked around in the code for the app, and even though I know next to nothing about python I found that there's a "reuse" parameter on the call that binds the listening port, and it's defaulting to "false". I bet if I explicitly set it to "true" that I'll get the behavior I want (or break the whole thing...)
Open Source is fun. :)


Luke Dean
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to