1) API for send hereResult<usize>
. Почему это ? В моей голове UDP-передача - это все или ничего. Возвращаемое значение, кажется, предполагает, что передача может быть успешным, но все данные не могут быть записаны, что делает меня такой код:UDP API в ржавчине
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,
}
}
Недавно кто-то сказал мне, что это совершенно не нужно. Но я не понимаю. Если бы это было так, почему вместо этого было возвращено не Result<()>
, чего я ожидал?
2) For reads хотя я понимаю. Я мог бы дать ему буфер размером 100 байт, но датаграмма может быть длиной всего 50 байт. Поэтому по существу я должен использовать только read_buf[..size_read]
. Здесь мой вопрос, что произойдет, если размер буфера равен 100, а размер дейтаграммы - 150 байт? Будет ли recv_from
заполнить всего 100 байт и вернуть Ok(100, some_peer_addr)
? Если я перечитаю, он заполнит оставшуюся датаграмму? Что, если другая датаграмма из 50 байт прибыла до моего второго чтения? Я получу только оставшиеся 50 байт во второй раз и 50 байт новой датаграммы в 3-й раз или полные 100 байт во второй раз, который также содержит новую датаграмму? Или будет ошибка, и я потеряю первую дейтаграмму в своем первоначальном чтении и никогда не смогу ее восстановить?