У меня есть клиент и сервер, взаимодействующий с дейтаграммами (UDP) на C. Клиент отправляет 5 сообщений, а после получения сообщений сервер отправляет сообщения обратно. Прием и отправка сообщений хороши, пока клиент не закончил получать сообщения. После того, как сервер отправил все сообщения обратно, он завершает работу с помощью close (). поэтому recvfrom () из клиента должен возвращать 0, верно?
Предполагая, что recvfrom () должен возвращать 0 при close () со стороны сервера, вместо этого он возвращает -1, а ошибка Resource временно недоступна. Является ли этот ресурс ссылкой на закрытый сокет с сервера? Или это для чего-то совершенно другого, такого как исчерпание буфера или что-то (что я не думаю, правда)?
Предполагая, что мое предположение было неверным и -1 возвращается, поскольку сервер завершен, я, вероятно, должен обработать ошибку с помощью
if(SOMEMACRO)
do something
Как мне узнать, что такое SOMEMACRO
? Я распечатываю ошибку, но там говорится, что ресурс недоступен, а в описании recvfrom () нет информации о недоступном ресурсе ..?
Кстати, это неблокирующий сокет, если это имеет какое-то значение, так как я прочитал, что если установлен O_NONBLOCK и нет доступных сообщений, он установит errno в EAGAIN или EWOULDBLOCK. O_NONBLOCK не установлен, но MSG_DONTWAIT установлен. Являются ли они в основном тем же, где O_NONBLOCK - для общих файловых дескрипторов, а MSG_DONTWAIT - для сокетов?
Мой мозг сейчас работает не так хорошо, если бы кто-то мог просветить меня и прояснить, в чем заключается мое замешательство, я был бы очень признателен. Спасибо!