Skip site navigation (1)Skip section navigation (2)
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>