| 227 | } |
| 228 | |
| 229 | pub fn blocking_send(&self, mut datagrams: &[OutgoingDatagram]) -> Result<(), ErrorCode> { |
| 230 | let timeout = monotonic_clock::subscribe_duration(TIMEOUT_NS); |
| 231 | |
| 232 | while !datagrams.is_empty() { |
| 233 | let permit = self.blocking_check_send(&timeout)?; |
| 234 | let chunk_len = datagrams.len().min(permit as usize); |
| 235 | match self.send(&datagrams[..chunk_len]) { |
| 236 | Ok(0) => {} |
| 237 | Ok(packets_sent) => { |
| 238 | let packets_sent = packets_sent as usize; |
| 239 | datagrams = &datagrams[packets_sent..]; |
| 240 | } |
| 241 | Err(err) => return Err(err), |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | Ok(()) |
| 246 | } |
| 247 | } |
| 248 | |
| 249 | impl IncomingDatagramStream { |