Skip to content

Instantly share code, notes, and snippets.

@dadleyy
Created October 6, 2019 13:10
Show Gist options
  • Save dadleyy/596a47d8b7bc3ee890c7ba602f9e5aca to your computer and use it in GitHub Desktop.
Save dadleyy/596a47d8b7bc3ee890c7ba602f9e5aca to your computer and use it in GitHub Desktop.
basic http rust & go
package main
import "fmt"
import "net/http"
type handle struct {
}
func (h *handle) ServeHTTP(response http.ResponseWriter, request *http.Request) {
header := response.Header()
header.Add("X-REQUEST-LINE", fmt.Sprintf("%s %s", request.Method, request.RequestURI))
response.WriteHeader(200)
fmt.Fprintf(response, "hello world\r\n")
}
func main() {
h := handle{}
http.ListenAndServe("0.0.0.0:4245", &h)
}
use std::io::prelude::*;
use std::io::BufReader;
use std::io::Result as StdResult;
use std::net::{Shutdown, TcpListener, TcpStream};
use std::thread::spawn;
const PAYLOAD: [u8; 11] = *b"hello world";
fn resolve(mut stream: TcpStream) -> StdResult<()> {
let mut lines = BufReader::new(&stream).lines();
let request_line = lines
.nth(0)
.ok_or(std::io::Error::from(std::io::ErrorKind::InvalidInput))?;
stream.write(b"HTTP/1.1 200 OK\r\n")?;
stream.write(format!("X-REQUEST-LINE: {:?}\r\n", request_line).as_bytes())?;
stream.write(format!("Content-Length: {:?}\r\n", PAYLOAD.len() + 2).as_bytes())?;
stream.write(b"\r\n")?;
stream.write(&PAYLOAD)?;
stream.write(b"\r\n")?;
return stream.shutdown(Shutdown::Both);
}
fn main() -> StdResult<()> {
let listener = TcpListener::bind("0.0.0.0:4244");
if let Ok(listener) = listener {
for stream in listener.incoming() {
if let Ok(stream) = stream {
spawn(move || resolve(stream));
}
}
}
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment