Date: Mon, 01 Dec 2014 10:37:12 -0500 From: Karl Denninger <karl@denninger.net> To: Yuri <yuri@rawbw.com>, Daniel Corbe <corbe@corbe.net> Cc: freebsd-net@freebsd.org Subject: Re: Can multiple apps listen for TCP on the same port? Message-ID: <20141201153712.4304976.24709.1746@denninger.net> In-Reply-To: <547C88AD.40407@rawbw.com> References: <547C5DD3.90604@rawbw.com> <20141201150225.GB64370@apollo.corbe.net> <547C88AD.40407@rawbw.com>
next in thread | previous in thread | raw e-mail | index | archive | help
The second bind() call does fail but if the application ignores the return = code...=E2=80=8E. Are you sure all the associated system call return codes = are being checked? The right way to do this Imho =C2=A0is to have a parent process that calls = bind 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 han= dle the connection with the parent closing the handle so as to not orphan t= he handle when the child exits. =E2=80=8E --=C2=A0Karl (On=C2=A0Passport=C2=A0PDA)=E2=80=8E =C2=A0 Original Message =C2=A0 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=20 instance isn't listening any more. The listening socket was closed. Why=20 the presence of the socket that was accepted from (now closed) listening=20 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141201153712.4304976.24709.1746>