Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Linux中创建原始套接字而不缓冲接收数据包?可能吗?_C++_Linux_Sockets - Fatal编程技术网

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

C++ 如何在Linux中创建原始套接字而不缓冲接收数据包?可能吗?,c++,linux,sockets,C++,Linux,Sockets,我使用Linux,并且创建了一个使用原始套接字的应用程序。当我打开它并recv(…)时,我得到了数据包,这些数据包在前面,我猜它们被缓冲在内核或网卡驱动程序中。但我不需要它们。我只需要在打开插座后发送的数据包 当然,我可以丢弃这些数据包,但我不知道需要丢弃多少数据包,因为每次数据包的数量都不同 如何创建此套接字?可能吗?取决于您协商通信主机/端口的方式,以及您是否可以控制发送这些数据包的内容 你可以: 1) 打开套接字后,立即执行recv()循环(使用flags=MSG_DONTWAIT)并忽略

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

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


如何创建此套接字?可能吗?

取决于您协商通信主机/端口的方式,以及您是否可以控制发送这些数据包的内容

你可以:


1) 打开套接字后,立即执行recv()循环(使用flags=MSG_DONTWAIT)并忽略每个数据包(假设它已过时),并在recv()返回时立即结束循环。谢谢。我无法控制传入的数据包,也无法自定义数据包的标头。第一个建议是好的。我怎么会变味?它将是所有的数据包,直到recv不会返回EWoldblock?什么是谈判?(我是英语初学者,有时不能理解特殊术语)。我想可能有ioctl(…)或setsockopts(…)之类的方法。是的-在recv(…,MSG_DONTWAIT)返回之前的所有数据包,通过“协商”,我的意思是,在发送实际数据之前,您可以让两个应用程序决定每次使用的端口-例如,首先在已知端口上发送数据包,并使用“请在端口X上与我交谈”,然后,真正的通信发生在该端口上。但考虑到您关于“我无法控制传入数据包,也无法自定义数据包头”的附加信息,我不相信您能够做到这一点,因为这要求您能够控制通信的两端。谢谢。我会试试EWOULDBLOCK,我不能协商两个申请。我只有来自网络的数据包,很多数据包。