From owner-freebsd-questions@FreeBSD.ORG Thu Apr 21 20:39:46 2005 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2B9CB16A4CE for ; Thu, 21 Apr 2005 20:39:46 +0000 (GMT) Received: from orb.pobox.com (orb.pobox.com [207.8.226.5]) by mx1.FreeBSD.org (Postfix) with ESMTP id C317E43D31 for ; Thu, 21 Apr 2005 20:39:45 +0000 (GMT) (envelope-from LukeD@pobox.com) Received: from orb (localhost [127.0.0.1]) by orb.pobox.com (Postfix) with ESMTP id 9527E933; Thu, 21 Apr 2005 16:39:42 -0400 (EDT) Received: from pool-71-112-215-205.sttlwa.dsl-w.verizon.net (pool-71-112-215-205.sttlwa.dsl-w.verizon.net [71.112.215.205]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by orb.sasl.smtp.pobox.com (Postfix) with ESMTP id 835F187; Thu, 21 Apr 2005 16:39:40 -0400 (EDT) Date: Thu, 21 Apr 2005 13:39:37 -0700 (PDT) From: Luke Dean X-X-Sender: lukas@border.crystalsphere.multiverse To: Philip Hallstrom In-Reply-To: <20050421130012.V86918@wolf.pjkh.com> Message-ID: <20050421133314.F6889@border.crystalsphere.multiverse> References: <20050421123644.U6491@border.crystalsphere.multiverse> <20050421130012.V86918@wolf.pjkh.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed cc: freebsd-questions@freebsd.org Subject: Re: Reusing a port after a crash X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Luke Dean List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Apr 2005 20:39:46 -0000 >> 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