summaryrefslogtreecommitdiffstats
path: root/yql/essentials/utils/network/bind_in_range.cpp
diff options
context:
space:
mode:
authorvvvv <[email protected]>2024-11-01 15:41:40 +0300
committervvvv <[email protected]>2024-11-01 15:55:52 +0300
commit3325f745e67f7f442790822b5c9c5e9996708be7 (patch)
treef7318d68bbe8990092715436444b05297ce35777 /yql/essentials/utils/network/bind_in_range.cpp
parent6dce3f1c71786f2694b73b1a5155efc58f4557dd (diff)
Moved yql/utils YQL-19206
Также была выделена жирная зависимость из yql/utils в yql/utils/network, в результате library/cpp/getopt была добавлена явно в те проекты, которые ее ранее наследовали, а не указывали явно commit_hash:36aa4c41f807b4cbbf70a3ed7ac0a1a5079bb75d
Diffstat (limited to 'yql/essentials/utils/network/bind_in_range.cpp')
-rw-r--r--yql/essentials/utils/network/bind_in_range.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/yql/essentials/utils/network/bind_in_range.cpp b/yql/essentials/utils/network/bind_in_range.cpp
new file mode 100644
index 00000000000..88cf641ce39
--- /dev/null
+++ b/yql/essentials/utils/network/bind_in_range.cpp
@@ -0,0 +1,27 @@
+#include "bind_in_range.h"
+
+#include <yql/essentials/utils/log/log.h>
+#include <util/datetime/base.h>
+
+namespace NYql {
+
+TVector<NBus::TBindResult> BindInRange(TRangeWalker<int>& portWalker) {
+ const int cyclesLimit = 3;
+ const int rangeSize = portWalker.GetRangeSize();
+ const auto cycleDelay = TDuration::Seconds(3);
+
+ for (int cycle = 0; cycle < cyclesLimit; ++cycle) {
+ for (int i = 0; i < rangeSize; ++i) {
+ try {
+ return NBus::BindOnPort(portWalker.MoveToNext(), false).second;
+ } catch (const TSystemError&) {
+ YQL_LOG(DEBUG) << CurrentExceptionMessage();
+ }
+ }
+
+ Sleep(cycleDelay);
+ }
+
+ ythrow yexception() << "Unable to bind within port range [" << portWalker.GetStart() << ", " << portWalker.GetFinish() << "]";
+}
+}