From owner-freebsd-net@FreeBSD.ORG Mon Dec 1 16:14:59 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 20A4D451 for ; Mon, 1 Dec 2014 16:14:59 +0000 (UTC) Received: from mail-wi0-x234.google.com (mail-wi0-x234.google.com [IPv6:2a00:1450:400c:c05::234]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 94AA42BF for ; Mon, 1 Dec 2014 16:14:58 +0000 (UTC) Received: by mail-wi0-f180.google.com with SMTP id n3so17915995wiv.7 for ; Mon, 01 Dec 2014 08:14:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=hIv9+XpW6D9xu/V6XOT46GbZt0nSp/ykfcoM32Q7wgQ=; b=qsqQ4wHa+aS4izBGywuToNqvpLXMfSwFxPqzh/Uw2j9hCK5N0L+GttIwzM237de9GS OR7+8OpWu6x8M+bMTwVsMhjbJAY/sVzZajxkvtcgTtN/ocd79nnnOj88cJ8AqaE765u2 Y9KmynOvMtFMJuts6VBlD4IumVN9T3xKZclCeMKDHhjZQGf85CTKSbB9eKxGDUQR6mHT 9DNj2X3mpaRVO++qrqvfernWwrqne9jQq//viHwgvc+KNM3ujZJC//Eo7yMZ5hWx9O+I Eyv6BW2O3EnQ+1zoOU7xkxWfF6v5lacE+ganvjNAvIgjYbxm7a618bi/C0kW/MFIdgkR awnQ== MIME-Version: 1.0 X-Received: by 10.180.76.211 with SMTP id m19mr30041937wiw.73.1417450497008; Mon, 01 Dec 2014 08:14:57 -0800 (PST) Received: by 10.27.130.68 with HTTP; Mon, 1 Dec 2014 08:14:56 -0800 (PST) In-Reply-To: <20141201153712.4304976.24709.1746@denninger.net> References: <547C5DD3.90604@rawbw.com> <20141201150225.GB64370@apollo.corbe.net> <547C88AD.40407@rawbw.com> <20141201153712.4304976.24709.1746@denninger.net> Date: Mon, 1 Dec 2014 21:44:56 +0530 Message-ID: Subject: Re: Can multiple apps listen for TCP on the same port? From: Someone Somewhere To: Karl Denninger Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 Cc: Daniel Corbe , Yuri , freebsd-net@freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Dec 2014 16:14:59 -0000 @Yuri , are you sure that the second instance of nc does not accept any connection? I did a simple test : -> #: nc -l 12345 (shell 1) #: nc localhost 12345 (shell2) at this point netstat shows that there is no one listening on 12345. This means any process should not be able to bind over port 12345(over TCP). # nc -l 12345 (shell 3, shell 1 , 2 still active) this instance of nc starts listening which I could verify via netstat cmd. # nc localhost 12345 (shell 4) this nc instance connected to the nc started in previous step over shell 3. Test ran on Fedora 20. [will try this on freeBSD VM if you confirm that this is what you are trying] Could you verify if your second nc(server) instance is listening on the same socket number? -Kunal. On 1 December 2014 at 21:07, Karl Denninger wrote: > The second bind() call does fail but if the application ignores the retur= n > code...=E2=80=8E. Are you sure all the associated system call return code= s are > being checked? > > The right way to do this Imho is to have a parent process that calls bin= d > and listen, gets the notification of an incoming connection via select() > (allowing detection of exceptions as well) and then calls accept() and, n= ow > having a connected file handle, fork()s and executes whatever is to handl= e > the connection with the parent closing the handle so as to not orphan the > handle when the child exits. > =E2=80=8E > -- Karl > (On Passport PDA)=E2=80=8E > > > Original Message > From: Yuri=E2=80=8E > Sent: Monday, December 1, 2014 10:26 > To: Daniel Corbe > Cc: freebsd-net@freebsd.org > Subject: Re: Can multiple apps listen for TCP on the same port? > > On 12/01/2014 07:02, Daniel Corbe wrote: > > Generally the answer to your question is no. Two applications cannot > > occupy the same port on the same protocol at the same time. > > > > To expand on this answer and to hopefully shed some light on why the > > behavior you're observing with your application is absolutely correct; > > the calling application (in this case, nc) has to explicitly call bind(= 2) > > before it can begin accepting connections. If that port is already in > > use then the call to bind(2) will fail. And in your case I suspect nc > > is simply choosing to silently fail. > > Here the question is what does it mean "occupy the port"? The first > instance isn't listening any more. The listening socket was closed. Why > the presence of the socket that was accepted from (now closed) listening > socket in the first instance is considered "occupying it"? > > Actually no system call in the second instance ever fails. > > Yuri > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > > > %SPAMBLOCK-SYS: Matched [@freebsd.org+], message ok > > > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" >