uses async to wait for ports to open