Utilizzando le API socket UNIX su Linux, esiste un modo per garantire di leggere un pacchetto UDP e un solo pacchetto UDP? Attualmente sto leggendo pacchetti da un socket non bloccante usando recvmsg, con una dimensione del buffer un po 'più grande della MTU della nostra rete interna. Ciò dovrebbe garantire che possa sempre ricevere il pacchetto UDP completo, ma non sono sicuro di poter garantire che non riceverò mai più di un pacchetto per ogni chiamata recvmsg, se i pacchetti sono piccoli.posso leggere esattamente un pacchetto UDP da un socket?
Le pagine man di riferimento richiamano l'opzione MSG_WAITALL, che tenta di attendere fino al riempimento del buffer. Non stiamo usando questo, quindi implica che recvmsg ritornerà sempre dopo che un datagramma è stato letto? C'è un modo per garantire questo?
Idealmente mi piacerebbe una soluzione cross UNIX, ma se questo non esiste c'è qualcosa di specifico per Linux?
MSG_WAITALL è per socket orientati al flusso: http://linux.die.net/man/3/recvmsg Come già risposto, recv/send() funziona utilizzando interi datagrammi per socket orientati al datagramma. – Ioan