UDP e soquetes, recvfrom () retornando -1 e recurso temporariamente indisponível

Eu tenho um cliente e um servidor se comunicando com datagramas (UDP) em C. O cliente envia 5 mensagens e, ao receber mensagens, o servidor envia mensagens de volta. Receber e enviar mensagens é excelente até o cliente terminar de receber as mensagens. Após o servidor enviar todas as mensagens de volta, ele termina usando close (). então recvfrom () do cliente deve retornar 0, certo?

Supondo que recvfrom () devolve 0 ao fechar () do lado do servidor, devolve -1 em vez disso, com o recurso de erro temporariamente indisponível. Este recurso é referência ao soquete fechado do servidor? Ou é para algo completamente diferente, como ficar sem buffer ou algo assim (o que eu não acho que seja verdade)?

Supondo que minha suposição estava errada e -1 seja retornado porque o servidor foi encerrado, eu provavelmente deveria lidar com o erro com

if(SOMEMACRO)
   do something 

Como descubro o queSOMEMACRO é? Eu imprimo o erro, mas ele diz que a temperatura do recurso está indisponível e a descrição recvfrom () não menciona o recurso não disponível ..?

Btw, este é um soquete sem bloqueio, se isso faz alguma diferença, pois eu li que se O_NONBLOCK estiver definido e nenhuma mensagem estiver disponível, ele definiria errno como EAGAIN ou EWOULDBLOCK. O_NONBLOCK não está definido, mas MSG_DONTWAIT está definido. Eles são basicamente a mesma coisa em que O_NONBLOCK é para descritores gerais de arquivo e MSG_DONTWAIT é específico do soquete?

Meu cérebro não está funcionando tão bem agora, se alguém pudesse me esclarecer e esclarecer o que é a minha confusão, eu apreciaria profundamente. Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion