1) API for send here restituisce Result<usize>
. Perché ? Nella mia testa, un invio UDP è tutto o nessuno. Il valore di ritorno sembra suggerire che l'invio può avere successo, ma tutti i dati non può essere scritto che mi rende il codice come:API UDP in Rust
let mut bytes_written = 0;
while bytes_written < data.len() {
bytes_written += match udp_socket.send_to(&data[bytes_written..]) {
Ok(bytes_tx) => bytes_tx,
Err(_) => break,
}
}
Recentemente qualcuno mi ha detto che questo è completamente inutile. Ma non capisco. Se fosse vero perché il ritorno non è Result<()>
, che è anche quello che mi aspettavo?
2) For reads anche se ho capito. Potrei dargli un buffer di dimensioni 100 byte ma il datagramma potrebbe essere lungo solo 50 byte. Quindi essenzialmente dovrei utilizzare solo read_buf[..size_read]
. Qui la mia domanda è cosa succede se la dimensione del buffer è 100 ma la dimensione del datagramma è di 150 byte? Sarà recv_from
riempire solo 100 byte e restituire Ok(100, some_peer_addr)
? Se rileggo, riempirà il resto del datagramma? Cosa succede se un altro datagramma di 50 byte è arrivato prima della mia seconda lettura? Riceverò solo i restanti 50 byte la seconda volta e 50 byte del nuovo datagrammo la terza volta o completerò 100 byte la seconda volta che contiene anche il nuovo datagramma? O sarà un errore e perderò il 1 ° datagramma nella mia lettura iniziale e non sarò mai in grado di recuperarlo?