Commit 895e93cb by xia-chu

端口池分配端口改成无序分配

解决zlmediakit重启后端口重复分配导致国标串流问题
parent 0c80f0c1
...@@ -8,12 +8,13 @@ ...@@ -8,12 +8,13 @@
* may be found in the AUTHORS file in the root of the source tree. * may be found in the AUTHORS file in the root of the source tree.
*/ */
#include <cstdlib>
#include <cinttypes>
#include <random>
#include "Rtsp.h" #include "Rtsp.h"
#include "Common/Parser.h" #include "Common/Parser.h"
#include "Common/config.h" #include "Common/config.h"
#include "Network/Socket.h" #include "Network/Socket.h"
#include <cinttypes>
#include <cstdlib>
using namespace std; using namespace std;
using namespace toolkit; using namespace toolkit;
...@@ -392,9 +393,13 @@ public: ...@@ -392,9 +393,13 @@ public:
private: private:
void setRange(uint16_t start_pos, uint16_t end_pos) { void setRange(uint16_t start_pos, uint16_t end_pos) {
std::mt19937 rng(std::random_device {}());
lock_guard<recursive_mutex> lck(_pool_mtx); lock_guard<recursive_mutex> lck(_pool_mtx);
auto it = _port_pair_pool.begin();
while (start_pos < end_pos) { while (start_pos < end_pos) {
_port_pair_pool.emplace_back(start_pos++); // 随机端口排序,防止重启后导致分配的端口重复
_port_pair_pool.insert(it, start_pos++);
it = _port_pair_pool.begin() + (rng() % (1 + _port_pair_pool.size()));
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论