master
Andrew Johnson 6 years ago
parent df5983d26d
commit 8bd338e3f6

@ -20,3 +20,7 @@ path = "fork1.rs"
[[bin]]
name = "fork2"
path = "fork2.rs"
[[bin]]
name = "fork3"
path = "fork3.rs"

@ -0,0 +1,36 @@
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);
}
}
Loading…
Cancel
Save