You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
933 B
Rust

extern crate nix;
use nix::unistd::{fork,ForkResult};
use std::{thread,time};
use std::process;
use std::io::prelude::*;
use std::net::TcpListener;
fn serve(listener: TcpListener) -> ! {
for stream in listener.incoming() {
let mut buffer = [0; 2048];
let mut tcp = stream.unwrap();
tcp.read(&mut buffer).expect("tcp read failed");
let response = format!("respond from #{}\n", process::id());
tcp.write(response.as_bytes()).expect("tcp write failed");
}
panic!("unreachable");
}
fn main() {
let listener = TcpListener::bind("127.0.0.1:8888").unwrap();
let mut children = Vec::new();
for _ in 0..3 {
match fork().expect("fork failed") {
ForkResult::Parent{ child: pid } => { children.push(pid); }
ForkResult::Child => {
serve(listener)
}
}
}
let t = time::Duration::from_millis(1000);
loop {
thread::sleep(t);
}
}