Sono abbastanza nuovo nella programmazione e nella programmazione della rete Esp quindi se è stupido, non bash troppo duro per favore, grazie.UDP e socket, recvfrom() ritorno -1 e risorsa temporaneamente non disponibile
Ho client e server che comunicano con diagrammi (UDP) in C. client invia 5 msgs e alla ricezione di msgs, il server invia indietro msgs. ricevere e inviare messaggi è grandioso fino a quando il client ha finito di ricevere i messaggi. dopo che il server ha inviato tutti i messaggi indietro, termina utilizzando close(). quindi recvfrom() dal client dovrebbe restituire 0, giusto?
assumendo recvfrom() dovrebbe restituire 0 su close() dal lato server, restituisce -1 invece, con errore Risorsa temporaneamente non disponibile. è questo riferimento risorsa al socket chiuso dal server? o è per qualcosa di completamente diverso come l'esaurimento del buffer o qualcosa (che non penso sia vero)?
e assumendo la mia ipotesi era sbagliata e -1 viene restituito a causa di server terminato, probabilmente dovrebbe gestire l'errore con
if(SOMEMACRO)
do something
ma come faccio a sapere che cosa è SOMEMACRO
? stampo l'errore ma dice che la temp delle risorse non è disponibile e la descrizione recvfrom() non parla di risorse non recuperabili ..?
btw questo è un socket non bloccante, se questo fa alcuna differenza visto che ho letto che se O_NONBLOCK è impostato e nessun msg è disponibile, imposterà errno su EAGAIN o EWOULDBLOCK. O_NONBLOCK non è impostato ma è impostato MSG_DONTWAIT. sono fondamentalmente la stessa cosa in cui O_NONBLOCK è per i descrittori di file generali e MSG_DONTWAIT è specifico per il socket ??
Il mio cervello non sta funzionando molto bene ora, se qualcuno potesse illuminarmi e chiarire di cosa sia la mia confusione, lo apprezzerei molto. Grazie!
Quindi se stai usando UDP, recvfrom() restituirà mai 0? dal momento che non sai mai se il peer ha eseguito un arresto regolare? –
@Fantastic Fourier - UDP può effettivamente inviare un datagramma che è solo l'IP e le intestazioni UDP ma nessun carico utile di dati. È perfettamente legale e ti sembrerà una lettura di 0 byte. – Duck
@Fantastic Fourier - A rigor di termini visto che non esiste una "connessione" in UDP, non c'è nulla da spegnere, ordinato o meno. – Duck