I'm writing a code to test some custom handshake between two peers.
- Run TcpListener
- Wait until it initializes
- Process handshake
let mut core = Core::new().unwrap();
let handle = core.handle();
let addr: SocketAddr = "127.0.0.1:8000".parse().unwrap();
let handle_cloned = handle.clone();
let fut_stream = TcpListener::bind(&addr, &handle_cloned).unwrap();
let fut = fut_stream.incoming()
.for_each(move |(stream, _)| {
println!("connected");
do_handshake(stream)
})
.map_err(...);
handle.spawn(fut);
let stream = TcpStream::connect(&addr, &handle_cloned);
let res = core.run(stream);
This code leads to race condition and sometimes it prints "connected", sometimes not.
And my question is how to ensure that TcpListener is running before I start connecting?