我使用Linux,并创建特定的应用程序。我使用原始套接字。而且,当我打开它并recv(...)时,我收到了数据包,这些数据包已被收集,而且,我猜测,它是在内核或网卡驱动程序中缓存的。但我不需要它们。我只需要数据包,我打开插座后就去了。 Ofcource,我可以丢弃这些数据包,但我不知道我需要丢弃多少数据包,因为每次数据包的数量都不同。 如何创建这个套接字?可能吗?
答案 0 :(得分:3)
取决于您如何协商主机/端口进行通信,您是否可以控制发送这些数据包的任何内容?
你可以:
1)打开套接字后,立即执行一个recv()循环(带有flags = MSG_DONTWAIT)并忽略每个数据包,假设它是陈旧的,一旦recv()返回< = 0字节就结束循环(它应该将errno设置为EWOULDBLOCK以指示没有任何东西可以读取,否则原因可能是另一个与套接字相关的问题)
2)每次协商新端口
3)向数据包添加自定义标头(例如,前N位)以指示例如序列号,或特殊的"新连接"代码或时间戳。这种用法实际上取决于你在这个原始套接字的两端做了什么。