connect () действительно совершенно не нужен для SOCK_DGRAM.
Вызов соединения не останавливает получение пакетов от других хостов и не останавливает их отправку. Только не беспокойтесь, это не очень полезно.
ИСПРАВЛЕНИЕ: да, по-видимому, оно останавливает получение пакетов от других хостов. Но делать это на сервере немного глупо, потому что любые другие клиенты будут заблокированы, пока вы подключены () к одному. Также вам все равно нужно будет ловить "мякину", которая плавает вокруг. Вероятно, существуют некоторые условия состязания, связанные с connect () в сокете DGRAM - что произойдет, если вы вызываете connect и пакеты из других хостов уже находятся в буфере?
Кроме того, 0 является допустимым возвращаемым значением из recvfrom (), поскольку пустые (без данных) пакеты являются действительными и могут существовать (действительно, люди часто их используют). Поэтому вы не можете проверить, удалось ли что-то таким образом.
По всей вероятности, пакет с нулевым байтом уже был в очереди.
Ваш протокол должен быть спроектирован так, чтобы минимизировать вероятность ошибочной интерпретации дейтаграммы; по этой причине я бы посоветовал вам не использовать пустые датаграммы, а вместо этого использовать магическое число.
Приложения UDP ДОЛЖНЫ быть в состоянии распознавать "случайные" пакеты и отбрасывать их; они рано или поздно появятся.