In alcuni casi, vorrei scartare esplicitamente i pacchetti in attesa sul socket con il minor overhead possibile. Sembra che non ci sia una chiamata di sistema "drop udp buffer" esplicita, ma forse ho torto?Scarta pacchetto UDP in entrata senza leggere
Il prossimo modo migliore sarebbe probabilmente quello di recv
il pacchetto in un buffer temporaneo e basta rilasciarlo. Sembra che non possa ricevere 0 byte, dal momento che l'uomo dice di recv
: The return value will be 0 when the peer has performed an orderly shutdown.
Quindi 1 è il minimo in questo caso.
C'è qualche altro modo per gestire questo?
Per ogni evenienza, questa non è un'ottica prematura. L'unica cosa che questo server sta facendo è di inoltrare/inviare i pacchetti UDP in un modo specifico - anche se recv
con len=1
non mi ucciderà, preferirei semplicemente scartare l'intera coda in una volta sola con una funzione più specifica (si spera che abbassando il latenza).
Quali criteri stai usando per decidere cosa scartare? –
Non sono sicuro di quello che posso dire qui, quindi ha senso ... fondamentalmente due parti stanno annunciando (con un cookie condiviso) che hanno bisogno di un proxy. Il server deve aprire il socket dopo la prima richiesta per assicurarsi che la porta non sia utilizzata da nessun altro. Fino al completamento della configurazione, ho bisogno di rilasciare i pacchetti, altrimenti sono messi in coda e risentiti più tardi - è una cosa molto brutta nel mio scenario. Quindi in pratica ho una bandiera interna per ogni connessione che dice: rilascia tutto o inoltra tutto. – viraptor