如何在Linux中创build原始套接字而不缓冲接收数据包? 可能吗?

我使用Linux,并创build特定的应用程序。 我使用原始套接字。 而且,当我打开它和recv(…),我得到的数据包,这是怎么样,我猜怎么着,被缓冲在内核,或网卡驱动程序。 但我不需要他们。 我只需要数据包,我打开套接字后就去了。 Ofcource,我可以丢弃这个数据包,但是我不知道我需要丢弃多less个数据包,因为每次数据包的数量都不一样。 如何创build这个套接字? 可能吗?

取决于你如何协商主机/端口进行通信,你是否能控制发送这些数据包的任何东西?

你可以:

1)打开套接字后立即执行一个recv()循环(标志= MSG_DONTWAIT),忽略每个数据包假设它是陈旧的,只要recv()返回<= 0字节就结束循环(它应该设置errno为EWOULDBLOCK表示没有任何东西可以读取,否则原因可能是另一个套接字相关的问题)

2)每次谈判一个新的端口

3)为你的数据包添加一个自定义标题(例如,前N位),以指示例如序列号,或特殊的“新连接”代码或时间戳。 这个用法真的取决于你在这个原始套接字的两端做了什么。