решение
                  
                  
                  let fut = async move {
                  
                  
                      let mut stream = acceptor.accept(stream).await?;
                  
                  
                      let mut buf = [0; 1024];
                  
                  
                      let n = stream.read(&mut buf).await?;
                  
                  
                      println!("{}", from_utf8(&buf[..n]).unwrap());
                  
                  
                      let (tcp, _) = stream.get_ref();
                  
                  
                      tokio::select! {
                  
                  
                          _ = sleep(Duration::from_secs(1)) => {
                  
                  
                              println!("sleep finish");
                  
                  
                              stream
                  
                  
                                  .write_all(
                  
                  
                                      &b"HTTP/1.0 200 ok\r\n\
                  
                  
                                  Connection: close\r\n\
                  
                  
                                  \r\n\
                  
                  
                                  hello world\n"[..],
                  
                  
                                  )
                  
                  
                                  .await?;
                  
                  
                  
                  
                  
                              stream.flush().await?;
                  
                  
                              stream
                  
                  
                                  .shutdown()
                  
                  
                                  .await
                  
                  
                                  .map_err(|e| anyhow!("shutdown {e:?}"))?;
                  
                  
                          }
                  
                  
                          _ = async {
                  
                  
                              loop {
                  
                  
                                  match tcp.ready(Interest::READABLE).await {
                  
                  
                                      Ok(r) => if r.is_read_closed() {
                  
                  
                                          break
                  
                  
                                      },
                  
                  
                                      Err(e) => {
                  
                  
                                          println!("{e}")
                  
                  
                                          break;
                  
                  
                                      }
                  
                  
                                  }
                  
                  
                                  sleep(Duration::from_millis(50)).await;
                  
                  
                              }
                  
                  
                          } => {
                  
                  
                              println!("closed");
                  
                  
                          }
                  
                  
                      }
                  
                  
                      Ok(()) as anyhow::Result<()>
                  
                  
                  };
                  
                  
                
А peek не подойдёт? Пару байтиков взять, чтобы убедиться в целостности коннекта
 Дмитрий
                          Бондаренко
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Дмитрий
                          Бондаренко
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                   Дмитрий
                          Бондаренко
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Дмитрий
                          Бондаренко
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Вроде работает. Этот вариант мне больше нравится
Обсуждают сегодня