message: fixed bug. ProxyClientStream write may missed the addr if send() returns EAGAIN
diff: @@ -177,12 +177,12 @@ where
  S: AsyncRead + AsyncWrite + Unpin,
  {
  fn poll_write(mut self: Pin<&mut Self>, cx: &mut task::Context<'_>, buf: &[u8]) -> Poll<Result<usize, io::Error>> {
  - if self.addr.is_none() {
  + match self.addr {
  + None => {
  // For all subsequence calls, just proxy it to self.stream
  return self.stream.poll_write_encrypted(cx, buf);
  }
  -
  - let addr = self.addr.take().unwrap();
  + Some(ref addr) => {
  let addr_length = addr.serialized_len();
  let mut buffer = BytesMut::with_capacity(addr_length + buf.len());
  @@ -191,6 +191,12 @@ where
  ready!(self.stream.poll_write_encrypted(cx, &buffer))?;
  + // fallthrough. take the self.addr out
  + }
  + }
  +
  + let _ = self.addr.take();
  +
  // NOTE:
  // poll_write will return Ok(0) if buf.len() == 0
  // But for the first call, this function will eventually send the handshake packet (IV/Salt + ADDR) to the remote address.
  