Linux-没有可用的缓冲区空间-什么';这意味着,我如何确定可用空间,如何阻止它占用空间?

Linux-没有可用的缓冲区空间-什么';这意味着,我如何确定可用空间,如何阻止它占用空间?,linux,arp,sockets,Linux,Arp,Sockets,我使用perl原始套接字发送大量任意原始数据包(没有恶意!),但在send()调用失败且“没有可用的缓冲区空间”之前,我只收到大约14500个数据包 我猜内核中有什么东西在跟踪我发送的内容?我怎样才能防止这种情况。我只想发送每个数据包,没有必要等待回复或记住任何关于发送内容的信息。(更新:我注意到在我的“netstat”命令中加载了“CLOSE_WAIT”条目-我如何告诉内核不要这样做?) 它所指的“缓冲区空间”是什么?有没有办法检查哪些空间可用,这样我就可以避免在没有空间的情况下发送更多?或者

我使用perl原始套接字发送大量任意原始数据包(没有恶意!),但在send()调用失败且“没有可用的缓冲区空间”之前,我只收到大约14500个数据包

我猜内核中有什么东西在跟踪我发送的内容?我怎样才能防止这种情况。我只想发送每个数据包,没有必要等待回复或记住任何关于发送内容的信息。(更新:我注意到在我的“netstat”命令中加载了“CLOSE_WAIT”条目-我如何告诉内核不要这样做?)

它所指的“缓冲区空间”是什么?有没有办法检查哪些空间可用,这样我就可以避免在没有空间的情况下发送更多?或者-有没有办法在“send()”上“阻塞”,这样我就不会遇到错误


或者-是否有其他方法发送以太网数据包(例如:SYN),其中内核知道不在任何表中输入任何内容?

如果关闭等待连接是您的:

  • 您使用的是TCP,而不是原始套接字
  • 您没有关闭套接字

  • 你在使用TCP吗?如果是,这就是关闭等待条目的原因。请改为尝试UDP。如果从send()中获取错误后,您睡眠了一秒钟,然后是否可以无错误地再次发送(),或者这是一个永久性错误(一旦收到错误,您必须结束进程或执行其他一些步骤来恢复)?