UDP и сокеты, recvfrom (), возвращающий -1 и ресурс временно недоступен

У меня есть клиент и сервер, взаимодействующий с дейтаграммами (UDP) на C. Клиент отправляет 5 сообщений, а после получения сообщений сервер отправляет сообщения обратно. Прием и отправка сообщений хороши, пока клиент не закончил получать сообщения. После того, как сервер отправил все сообщения обратно, он завершает работу с помощью close (). поэтому recvfrom () из клиента должен возвращать 0, верно?

Предполагая, что recvfrom () должен возвращать 0 при close () со стороны сервера, он возвращает -1 вместо этого с ошибкой Resource, временно недоступной. Является ли этот ресурс ссылкой на закрытый сокет с сервера? Или это для чего-то совершенно другого, такого как исчерпание буфера или что-то (что я не думаю, правда)?

Предполагая, что мое предположение было неверным и -1 возвращается, потому что сервер завершен, я, вероятно, должен обработать ошибку с

if(SOMEMACRO)
   do something 

Как мне узнать чтоSOMEMACRO является? Я распечатываю сообщение об ошибке, но в нем говорится, что ресурс temp недоступен, а в описании recvfrom () не упоминается о недоступном ресурсе ..?

Кстати, это неблокирующий сокет, если это имеет какое-то значение, так как я прочитал, что если установлен O_NONBLOCK и нет доступных сообщений, он установит errno в EAGAIN или EWOULDBLOCK. O_NONBLOCK не установлен, но MSG_DONTWAIT установлен. Являются ли они в основном тем же, где O_NONBLOCK - для общих файловых дескрипторов, а MSG_DONTWAIT - для сокетов?

Мой мозг работает не так хорошо, если бы кто-то мог просветить меня и уточнить, в чем заключается мое замешательство, я был бы очень признателен. Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос