Для udp обычный вызов recvfrom
вернет 0 при получении пакета udp с полезной нагрузкой 0 длины (см. В Linux, может ли recv когда-либо возвращать 0 по UDP? ).
Вы можете проверить это, выполнив простой тест sendto / recvfrom:
const int howManyBytesToSend = 0;
if(sendto(sock, buf, howManyBytesToSend, 0, (struct sockaddr*) &addr, addrlen) < 0)
{
return EXIT_FAILURE;
}
if((recv_len = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *) &addr, (socklen_t*)&addrlen)) < 0)
{
return EXIT_FAILURE;
}
Документация, которую вы цитируете, находится на странице man для recvfrom: "возвращает количество прочитанных байтов, но 0зарезервировано для упорядоченного отключения ".Это утверждение относится только к TCP.