microasync_util/io/write/
tcpstream.rs1extern crate std;
2
3use core::{
4 future::Future,
5 pin::Pin,
6 task::{Context, Poll},
7};
8use std::{
9 io::{self, ErrorKind, Write},
10 net::TcpStream,
11};
12
13use super::{WriteExactFuture, WriteFuture};
14
15impl<'a> Future for WriteFuture<'a, TcpStream> {
16 type Output = Result<usize, io::Error>;
17
18 fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
19 let me = self.get_mut();
20 me.0.set_nonblocking(true)
21 .expect("unable to set nonblocking-mode.");
22 let r = Write::write(me.0, me.1);
23 me.0.set_nonblocking(false)
24 .expect("unable to clear nonblocking-mode.");
25
26 match r {
27 Ok(x) => Poll::Ready(Ok(x)),
28 Err(e) if e.kind() == ErrorKind::WouldBlock => Poll::Pending,
29 Err(e) => Poll::Ready(Err(e)),
30 }
31 }
32}
33
34impl<'a> Future for WriteExactFuture<'a, TcpStream> {
35 type Output = Result<(), io::Error>;
36
37 fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
38 let me = self.get_mut();
39 me.0.set_nonblocking(true)
40 .expect("unable to set nonblocking-mode.");
41 let r = Write::write_all(me.0, me.1);
42 me.0.set_nonblocking(false)
43 .expect("unable to clear nonblocking-mode.");
44
45 match r {
46 Ok(x) => Poll::Ready(Ok(x)),
47 Err(e) if e.kind() == ErrorKind::WouldBlock => Poll::Pending,
48 Err(e) => Poll::Ready(Err(e)),
49 }
50 }
51}