小编rez*_*brh的帖子

丢包只发生在第一次运行

我正在尝试提高在大型网络上运行的多播应用程序的性能(以减少其数据包丢失)

我的实验表明,在应用程序的第一次运行中,有一些丢失的数据包。但是当我在上次运行后再次运行应用程序时(有时也有一点延迟),没有丢包。虽然当我在长时间延迟(例如 20 分钟左右)后重新运行应用程序时,我再次看到数据包丢失。

当我检查他们的时间戳时,我看到丢失的数据包大部分是在开始时发送的数据包。所以看起来交换机或路由器需要一些预热!或其他东西(我不知道如何称呼这种现象)。

我检查了tcpdump结果,接收器应用程序收到的数据包数量与网络购物车收到的数据包数量完全相同。

我已经尝试了以下技巧: 1- 更改进程在不同 CPU 内核和调度策略上的关联性 2- 更改套接字描述符的优先级

改变套接字描述符的优先级已经使它变得更好(减少了丢失的数据包数量)但是在将优先级设置为高之后,再次有一些丢失的数据包)

// For example
MulticastSender multicast_sender;
multicast_sender.init();

// Here I need a function in order to find out the switch is already warmed up or not


while (some condition)
{
    ////

    multicast_sender.send(something);

    ////
}

Run Code Online (Sandbox Code Playgroud)

我想知道是不是有任何可能的方法来添加一些代码来确定交换机(或路由器)是否已经预热!足够的?

c++ sockets linux networking multicast

6
推荐指数
1
解决办法
70
查看次数

有没有办法将一对元组剥离为可变参数模板类型或使用可变参数类型实例化某些内容?

我有一个tupleof pairs,其中每对都有一个固定类型和一个变体类型。我想要的是一个变体类型列表或用这些类型定义一个对象(它肯定是用可变参数模板包构造的)。

根据How do I strip a tuple<>back into a variadic template list of types? ,可以用 的构成类型实例化某些东西tuple。但在这种情况下,我不知道这是否可能,如果可能,我不知道该怎么做。

想象一下我有这样的事情:

struct MyFixedType
{ /* ... */ };


using Tuple = std::tuple<
    std::pair<MyFixedType, int>,
    std::pair<MyFixedType, double>,
    std::pair<MyFixedType, std::string>
>;
Run Code Online (Sandbox Code Playgroud)

我有这门课:

template <typename... Ts>
class MyClass
{
};
Run Code Online (Sandbox Code Playgroud)

我要的是申报对象MyClass<int, double, std::string>

注意:虽然这种情况可以使用预处理器或一些宏来处理,但我不允许使用宏。

c++ c++11

5
推荐指数
1
解决办法
57
查看次数

boost :: lexical_cast错误的输出

的输出boost::lexical_castbool作为输入变量被预期为一个01值。但是我得到了不同的价值。

这不是正常情况。让我们看一下我编写的示例代码:

#include <string>

#include <boost/lexical_cast.hpp>

int main()
{
    bool alfa = true;    // Doesn't metter whether alfa is initialized at definition or not 
    char beta = 71;    // An integer value. Different values don't make any differences.
    memcpy(&alfa, &beta, sizeof(alfa));
    printf("%s\n", boost::lexical_cast<std::string>(alfa).c_str());
}

Run Code Online (Sandbox Code Playgroud)

从此代码中,我得到了"w"(w的ASCII码为71)作为输出!但是我希望它是一个01值。

问题是刚刚bool变量将进去。bool给定示例中的变量已被视为true。引起问题的原因是想象我要转换回转换后的值。那是引发异常的地方,因为例如“ w”字符不能转换为bool。但是,如果输出为01,则可以进行重新转换。

std::string converted_value = boost::lexical_cast<std::string>(alfa);
bool …
Run Code Online (Sandbox Code Playgroud)

c++ boost

4
推荐指数
1
解决办法
93
查看次数

标签 统计

c++ ×3

boost ×1

c++11 ×1

linux ×1

multicast ×1

networking ×1

sockets ×1