繁体   English   中英

如何在不缓冲接收数据包的情况下在 Linux 中创建原始套接字? 有可能吗?

[英]How create raw socket in Linux without buffering receive packets? Is it possible?

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

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

我怎样才能创建这个套接字? 有可能吗?

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

你可以:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM