Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Apr 2005 13:03:34 -0700 (PDT)
From:      Philip Hallstrom <freebsd@philip.pjkh.com>
To:        LukeD@pobox.com
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Reusing a port after a crash
Message-ID:  <20050421130012.V86918@wolf.pjkh.com>
In-Reply-To: <20050421123644.U6491@border.crystalsphere.multiverse>
References:  <20050421123644.U6491@border.crystalsphere.multiverse>

next in thread | previous in thread | raw e-mail | index | archive | help
>> 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...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050421130012.V86918>