Rid*_*der 5 sockets linux ethernet raw-sockets bpf
sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &f, sizeof (f))
Run Code Online (Sandbox Code Playgroud)
使用这个简单的 BPF/LPF 附加代码,当我尝试在套接字上接收数据包时,会得到一些与过滤器不匹配的错误数据包。在我调用setsockopt() 之前,这些数据包似乎已进入套接字。
似乎应该首先创建 AF_PACKET SOCK_RAW 套接字,然后附加过滤器,然后刷新套接字以摆脱那些错误的数据包。
所以问题是,如何刷新这些数据包?
您所描述的“错误”是真实存在的,我在职业生涯中曾在多家公司看到过它。围绕这个错误有一种类似于“口头传统”的东西,它从一个网络工程师传递给另一个网络工程师。以下是常见的修复方法:
recv套接字直到它为空我在我的博客上广泛撰写了有关此问题的文章,试图将围绕此错误的口头传统编入具体的建议和最佳实践。
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |