diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/coroutine/engine/helper.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/coroutine/engine/helper.cpp')
-rw-r--r-- | library/cpp/coroutine/engine/helper.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/library/cpp/coroutine/engine/helper.cpp b/library/cpp/coroutine/engine/helper.cpp new file mode 100644 index 0000000000..bffe208dc8 --- /dev/null +++ b/library/cpp/coroutine/engine/helper.cpp @@ -0,0 +1,37 @@ +#include "helper.h" + +#include "impl.h" +#include "network.h" + +namespace NCoro { + + bool TryConnect(const TString& host, ui16 port, TDuration timeout) { + bool connected = false; + + auto f = [&connected, &host, port, timeout](TCont* c) { + TSocketHolder socket; + TNetworkAddress address(host, port); + connected = (0 == NCoro::ConnectT(c, socket, address, timeout)); + }; + + TContExecutor e(128 * 1024); + e.Create(f, "try_connect"); + e.Execute(); + return connected; + } + + bool WaitUntilConnectable(const TString& host, ui16 port, TDuration timeout) { + const TInstant deadline = timeout.ToDeadLine(); + + for (size_t i = 1; Now() < deadline; ++i) { + const TDuration waitTime = TDuration::MilliSeconds(100) * i * i; + SleepUntil(Min(Now() + waitTime, deadline)); + + if (TryConnect(host, port, waitTime)) { + return true; + } + } + + return false; + } +} |