From owner-freebsd-net@FreeBSD.ORG Mon Dec 1 16:21:54 2014 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 09217670 for ; Mon, 1 Dec 2014 16:21:54 +0000 (UTC) Received: from mail-wi0-x22d.google.com (mail-wi0-x22d.google.com [IPv6:2a00:1450:400c:c05::22d]) (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 99647331 for ; Mon, 1 Dec 2014 16:21:53 +0000 (UTC) Received: by mail-wi0-f173.google.com with SMTP id r20so25151962wiv.6 for ; Mon, 01 Dec 2014 08:21:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=Nw1NYEzfBAKLmJ8xkQFVw7LbBsD93j6lTQYZwJLdvek=; b=CCGAOfbMyVqpCTr87OV2b1KhDBkMCCVwDAXbpyAZsHFmDeJf5Bp4Hpq8uMAkRwPS3D vbAq5KD9VAKLxGEjmNzhWtkn1PDE+KJpEvVieyvvv83y5pujivhXm/NHNnTGAPVMzSZH n0orU7AfkFZdsJscW67ATQh9gO8NSfnFJkQ4JXmtYGORQH4Nth7HVgsdU0VnNq6ITom1 mE74LWgmcqLvUoIFfblg4+bBkKqoc/G9hChLd3wK8yMbNIZz2e+/lrR+10zimcr6RDOV caPEtyPxwFGLdGhwhq333DKXVMPW5/NK2PP0mEWQpNPqS77oNpF9+X2UYXv6QA7Y2kVI 59fw== MIME-Version: 1.0 X-Received: by 10.180.108.35 with SMTP id hh3mr84007308wib.59.1417450911818; Mon, 01 Dec 2014 08:21:51 -0800 (PST) Sender: adrian.chadd@gmail.com Received: by 10.216.106.195 with HTTP; Mon, 1 Dec 2014 08:21:51 -0800 (PST) In-Reply-To: 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 08:21:51 -0800 X-Google-Sender-Auth: SpePoiGB5sSCnKs9WAO1p8n_o7U Message-ID: Subject: Re: Can multiple apps listen for TCP on the same port? From: Adrian Chadd To: Someone Somewhere Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: Daniel Corbe , Yuri , Karl Denninger , FreeBSD Net 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:21:54 -0000 Hi, I introduced a socket option in -HEAD that lets you bind multiple things to the same listen ports. They're only load balanced if you're using RSS and set up RSS socket options as well; otherwise only one gets the incoming requests. IP_BINDMULTI and IP6_BINDMULTI. -a On 1 December 2014 at 08:14, Someone Somewhere wrote: > @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 retu= rn >> code...=E2=80=8E. Are you sure all the associated system call return cod= es are >> being checked? >> >> The right way to do this Imho is to have a parent process that calls bi= nd >> and listen, gets the notification of an incoming connection via select() >> (allowing detection of exceptions as well) and then calls accept() and, = now >> having a connected file handle, fork()s and executes whatever is to hand= le >> the connection with the parent closing the handle so as to not orphan th= e >> 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" >> > _______________________________________________ > 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"