1)API for send hereはResult<usize>
を返します。何故ですか ?私の頭の中では、UDPの送信はすべて、またはまったくありません。 Rustの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)
を返しますか?私はそれがデータグラムの残りの部分を埋めるでしょうか? 2回目の読み込みの前に50バイトの別のデータグラムが到着した場合はどうなりますか?私は残りの50バイトを2回目に取得し、50バイトの新しいデータグラムを3回目に取得するか、100バイト目に2回目の新しいデータグラムが含まれていますか?またはエラーが発生し、私は最初の読み取りで最初のデータグラムを失い、それを回復することはできませんか?