55f12660891812d13a59e799b0ab5b185926479a
				
			
			
		
	HttpAcceptor::accept()'s HTTPS logic passes IO errors from the underlying SSL stream directly to the caller. Furthermore, the caller uses the EndOfFile error code to detect that the server should stop accepting connections. This means that if the TCP connection was succesfully accepted, but an EOF condition was detected during the handshake, the server will stop accepting connections and quit. This allows for a trivial denial of service attack and can happen accidentally as well. Change HttpAcceptor::accept such that if the TCP stream underlying the SSL stream returns an IoError error, a ConnectionAborted IoError is returned instead. This allows distinguishing between IoErrors from the acceptor and the stream. The original error reason is stored in the detail field.
hyper
A Modern HTTP library for Rust.
Overview
Hyper is a fast, modern HTTP implementation written in and for Rust. It is a low-level typesafe abstraction over raw HTTP, providing an elegant layer over "stringly-typed" HTTP.
Hyper offers both an HTTP/S client and HTTP server which can be used to drive complex web applications written entirely in Rust.
The documentation is located at http://hyperium.github.io/hyper.
WARNING: Hyper is still under active development. The API is still changing in non-backwards-compatible ways without warning.
Example
Hello World Server:
fn hello(_: Request, res: Response<Fresh>) {
    *res.status_mut() = status::Ok;
    let mut res = res.start().unwrap();
    res.write(b"Hello World!");
    res.end().unwrap();
}
fn main() {
    let server = Server::http(Ipv4Addr(127, 0, 0, 1), 1337);
    server.listen(hello).unwrap();
}
Client:
fn main() {
    // Create a client.
    let mut client = Client::new();
    // Creating an outgoing request.
    let mut res = client.get("http://www.gooogle.com/")
        // set a header
        .header(Connection(vec![Close]))
        // let 'er go!
        .send().unwrap();
    // Read the Response.
    let body = res.read_to_string().unwrap();
    println!("Response: {}", body);
}
License
					Languages
				
				
								
								
									Rust
								
								94.5%
							
						
							
								
								
									C
								
								5.2%
							
						
							
								
								
									Shell
								
								0.3%