Одна вещь, которая может привести к сбою приведенного выше кода, это то, что есть что-то еще, слушающее UDP-пакеты на порту 5020 на этом компьютере, и этот другой приемник UDP поглощает ваш пакет, а u2
никогда не получает его.
Но моей следующей мыслью было бы то, что тогда ваш bind()
должен сначала потерпеть неудачу, но есть опции сокетов, чтобы не вызывать его и позволить нескольким серверам прослушивать один и тот же порт.В этом случае случайно, какой сокет получает какой пакет.Это может объяснить то, что вы видите.
Я должен признать, что я не уверен, какова точная семантика bind()
для Windows 10, и каково точное поведение, когда несколько серверов UDP прослушивают один и тот же порт (ивозможно ли это вообще в Windows 10).
Типичная семантика «Windows» для bind (): При привязке к ненулевому IP-адресу привязывать к сетевому интерфейсу, которому принадлежит этот IP-адрес.(В то время как в Linux это означает: фильтровать все входящие пакеты по адресу назначения с этим ненулевым IP-адресом при привязке к всем сетевым интерфейсам.)