gpt4 book ai didi

c++ - 如何在不缓冲接收数据包的情况下在 Linux 中创建原始套接字?是否可以?

转载 作者:太空狗 更新时间:2023-10-29 21:15:14 24 4
gpt4 key购买 nike

我使用 Linux,并且创建了一个使用原始套接字的应用程序。当我打开它并 recv(...) 时,我得到了更早的数据包,我猜是在内核或网卡驱动程序中进行了缓冲。但我不需要它们。我只需要打开套接字后发送的数据包。

当然,我可以丢弃这些数据包,但我不知道我需要丢弃多少数据包,因为每次数据包的数量都不同。

如何创建这个套接字?可能吗?

最佳答案

取决于您如何协商要在其上进行通信的主机/端口,以及您是否可以控制发送这些数据包的任何内容?

你可以:

1) 打开套接字后,立即执行 recv() 循环(使用 flags=MSG_DONTWAIT)并忽略每个数据包,假设它是陈旧的,一旦 recv() 返回 <=0 字节(它应该将 errno 设置为 EWOULDBLOCK 以指示也没有任何内容可读,否则原因可能是另一个与套接字相关的问题)

2) 每次协商一个新的端口

3) 向您的数据包添加自定义 header (例如前 N 位)以指示例如序列号,或特殊的“新连接”代码,或时间戳。这种用法实际上取决于您在此原始套接字两端所做的事情。

关于c++ - 如何在不缓冲接收数据包的情况下在 Linux 中创建原始套接字?是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com