Skip to content

Instantly share code, notes, and snippets.

@CMGS
Created November 21, 2014 01:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CMGS/efefc222fd8dfdcd3a12 to your computer and use it in GitHub Desktop.
Save CMGS/efefc222fd8dfdcd3a12 to your computer and use it in GitHub Desktop.
proxy
use std::io::TcpListener;
use std::io::{Acceptor, Listener};
fn main() {
let listener = TcpListener::bind("0.0.0.0", 9999);
let mut acceptor = listener.listen();
for stream in acceptor.incoming() {
match stream {
Err(e) => println!("connect failed, {}", e),
Ok(stream) => spawn(proc() {
handler::proxy(stream);
})
}
}
drop(acceptor);
}
mod handler {
use std::io::TcpStream;
use std::io::util::copy;
pub fn proxy(mut stream: TcpStream) {
let mut redis_stream = match TcpStream::connect("127.0.0.1", 12345) {
Err(e) => {
println!("connect failed, {}", e);
return
},
Ok(redis_stream) => redis_stream,
};
let mut r_stream = stream.clone();
let mut r_redis_stream = redis_stream.clone();
spawn(proc() {
copy(&mut r_stream, &mut r_redis_stream);
});
copy(&mut redis_stream, &mut stream);
drop(redis_stream);
drop(stream)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment