Soy bastante nuevo en la programación y en la programación de redes esp, así que si es estúpido, no golpee demasiado, por favor, gracias.UDP y sockets, recvfrom() que devuelve -1 y el recurso no está disponible temporalmente
Tengo cliente y servidor que se comunican con diagramas (UDP) en C. el cliente envía 5 msgs y al recibir mensajes, el servidor envía mensajes de vuelta. recibir y enviar mensajes es excelente hasta que el cliente haya terminado de recibir los mensajes. después de que el servidor envíe todos los msgs, termina usando close(). entonces recvfrom() del cliente debería devolver 0, ¿verdad?
suponiendo que recvfrom() debe devolver 0 al cerrar() desde el lado del servidor, devuelve -1 en su lugar, con el error Recurso temporalmente no disponible. ¿Esta referencia de recurso a socket cerrado del servidor? ¿o es por algo completamente diferente como quedarse sin buffer o algo así (que no creo que sea cierto)?
y asumiendo mi suposición era errónea y se devuelve -1 porque el servidor terminado, probablemente debería manejar el error con
if(SOMEMACRO)
do something
pero ¿cómo puedo averiguar qué es SOMEMACRO
? Imprimo el error pero dice que la temperatura de los recursos no está disponible y la descripción de recvfrom() no menciona los recursos no disponibles.
por cierto este es un socket sin bloqueo, si eso hace alguna diferencia ya que leí que si se configura O_NONBLOCK y no hay msgs disponibles, se establecería errno en EAGAIN o EWOULDBLOCK. O_NONBLOCK no está configurado pero MSG_DONTWAIT está configurado. ¿son básicamente lo mismo donde O_NONBLOCK es para los descriptores de archivos generales y MSG_DONTWAIT es específico del socket?
Mi cerebro no está funcionando tan bien ahora, si alguien pudiera aclararme y aclarar de qué se trata mi confusión, lo agradecería profundamente. ¡Gracias!
Entonces, si está utilizando UDP, ¿recvfrom() alguna vez devolvería 0? ya que nunca se sabe si el par ha realizado un apagado ordenado –
@Fantastic Fourier: UDP realmente puede enviar un datagrama que es solo el IP y los encabezados UDP pero sin carga de datos. Es perfectamente legal y le parecerá una lectura de 0 bytes. – Duck
@Fantastic Fourier: Estrictamente hablando, dado que no hay una "conexión" en UDP, no hay nada que cerrar, ordenado o de otro modo. – Duck