forked from premiere/premiere-libtorrent
wait until python gets running to open its socket
This commit is contained in:
parent
76f53297a9
commit
54edd434f4
|
@ -544,6 +544,54 @@ void stop_all_proxies()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
#ifdef TORRENT_BUILD_SIMULATOR
|
||||||
|
void wait_for_port(int) {}
|
||||||
|
#else
|
||||||
|
void wait_for_port(int const port)
|
||||||
|
{
|
||||||
|
// wait until the python program is ready to accept connections
|
||||||
|
int i = 0;
|
||||||
|
io_service ios;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
tcp::socket s(ios);
|
||||||
|
error_code ec;
|
||||||
|
s.open(tcp::v4(), ec);
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
std::printf("ERROR opening probe socket: (%d) %s\n"
|
||||||
|
, ec.value(), ec.message().c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s.connect(tcp::endpoint(address::from_string("127.0.0.1")
|
||||||
|
, std::uint16_t(port)), ec);
|
||||||
|
if (ec == boost::system::errc::connection_refused)
|
||||||
|
{
|
||||||
|
if (i == 100)
|
||||||
|
{
|
||||||
|
std::printf("ERROR: somehow the python program still hasn't "
|
||||||
|
"opened its socket on port %d\n", port);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
std::this_thread::sleep_for(lt::milliseconds(500));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
std::printf("ERROR connecting probe socket: (%d) %s\n"
|
||||||
|
, ec.value(), ec.message().c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// returns a port on success and -1 on failure
|
// returns a port on success and -1 on failure
|
||||||
int start_proxy(int proxy_type)
|
int start_proxy(int proxy_type)
|
||||||
{
|
{
|
||||||
|
@ -611,6 +659,7 @@ int start_proxy(int proxy_type)
|
||||||
running_proxies.insert(std::make_pair(port, t));
|
running_proxies.insert(std::make_pair(port, t));
|
||||||
std::printf("%s launched\n", time_now_string());
|
std::printf("%s launched\n", time_now_string());
|
||||||
std::this_thread::sleep_for(lt::milliseconds(500));
|
std::this_thread::sleep_for(lt::milliseconds(500));
|
||||||
|
wait_for_port(port);
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -990,6 +1039,7 @@ int start_web_server(bool ssl, bool chunked_encoding, bool keepalive, int min_in
|
||||||
web_server_pid = r;
|
web_server_pid = r;
|
||||||
std::printf("%s launched\n", time_now_string());
|
std::printf("%s launched\n", time_now_string());
|
||||||
std::this_thread::sleep_for(lt::milliseconds(1000));
|
std::this_thread::sleep_for(lt::milliseconds(1000));
|
||||||
|
wait_for_port(port);
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue