@@ -3,30 +3,41 @@ layout: home
33---
44
55``` rust
6- # extern crate hyper;
76# extern crate tokio;
7+ # extern crate hyper;
8+ # extern crate http_body_util;
89# mod no_run {
9- use std :: {convert :: Infallible , net :: SocketAddr };
10- use hyper :: {Body , Request , Response , Server };
11- use hyper :: service :: {make_service_fn, service_fn};
10+ use std :: {convert :: Infallible , net :: SocketAddr , error :: Error };
11+ use http_body_util :: Full ;
12+ use hyper :: {Request , Response , body :: Bytes , service :: service_fn};
13+ use hyper :: server :: conn :: http1;
14+ use tokio :: net :: TcpListener ;
1215
13- async fn handle (_ : Request <Body >) -> Result <Response <Body >, Infallible > {
14- Ok (Response :: new (" Hello, World!" . into ()))
16+ async fn hello (
17+ _ : Request <hyper :: body :: Incoming >,
18+ ) -> Result <Response <Full <Bytes >>, Infallible > {
19+ Ok (Response :: new (Full :: new (Bytes :: from (" Hello World!" ))))
1520}
1621
1722#[tokio:: main]
18- async fn main () {
23+ async fn main () -> Result <(), Box < dyn Error + Send + Sync >> {
1924 let addr = SocketAddr :: from (([127 , 0 , 0 , 1 ], 3000 ));
2025
21- let make_svc = make_service_fn (| _conn | async {
22- Ok :: <_ , Infallible >(service_fn (handle ))
23- });
26+ let listener = TcpListener :: bind (addr ). await ? ;
2427
25- let server = Server :: bind (& addr ). serve (make_svc );
28+ loop {
29+ let (stream , _ ) = listener . accept (). await ? ;
2630
27- if let Err (e ) = server . await {
28- eprintln! (" server error: {}" , e );
31+ tokio :: task :: spawn (async move {
32+ if let Err (err ) = http1 :: Builder :: new ()
33+ . serve_connection (stream , service_fn (hello ))
34+ . await
35+ {
36+ println! (" Error serving connection: {:?}" , err );
37+ }
38+ });
2939 }
3040}
3141# }
42+ # fn main () {}
3243```
0 commit comments