Good way to send/receive UDP packets?
wjoe
invalid at example.com
Tue Jul 28 16:26:05 UTC 2020
On Tuesday, 28 July 2020 at 15:01:08 UTC, Kagamin wrote:
> On Monday, 27 July 2020 at 09:41:44 UTC, wjoe wrote:
>> But it's possible when bound with the socket option
>> SO_REUSEPORT (at least that's the name of the flag on linux
>> since 3.9).
>
> The docs say it can't be used to hijack an address.
>>This option must be set on each socket (including the first
>>socket) prior to calling bind(2) on the socket.
Nowhere did I claim that you could hijack a bound port but that
it's possible to reuse a port.
Nothing prevents a UDP library from setting that option
automatically or by default.
Nothing prevents any program to bind to a port with that option
set.
Normal behavior doesn't matter - what matters is what the library
you're using and other programs are doing.
All of this doesn't change the fact that every program that has a
socket bound to the same port on the same address at the same
time will get the datagrams deliverd.
One way to handle this scenario is to bind your socket with the
reuse option unset.
That would be first come first served.
Problem not solved - you still need to consider the fact that
another program or server on a different PC/address in the
network can assume that their corresponding client is up and
running and wants to receive on that very port.
Due to the nature of UDP communication, the server needn't care
if this assumption is true and send datagrams to it which you
will receive instead.
More information about the Digitalmars-d-learn
mailing list