1) API for send hereResult<usize>
देता है। ऐसा क्यों है ? मेरे सिर में, एक यूडीपी भेज सभी या कोई नहीं है।जंग में यूडीपी एपीआई
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 बाइट मिलेगा या दूसरी बार 100 बाइट्स मिलेगा जिसमें नया डेटाग्राम भी होगा? या एक त्रुटि होगी और मैं अपने प्रारंभिक पढ़ने पर पहला डेटाग्राम खो दूंगा और कभी भी इसे पुनर्प्राप्त करने में सक्षम नहीं हूं?