当前位置:  开发笔记 > 后端 > 正文

如何丢弃原始套接字中的传入数据包?

如何解决《如何丢弃原始套接字中的传入数据包?》经验,为你挑选了1个好方法。

我正在Linux下编写一个C/C++应用程序,它从原始套接字读取数据(用于ICMP数据包).问题:有没有办法丢弃仍然在套接字上排队的所有数据?

问题是睡了一会儿之后,插座上排队的数据我不感兴趣; 所以最好只告诉套接字"忘记你现在缓冲的所有数据",这样如果我进入select()/ recvfrom()循环,那么我只得到最近收到的数据.

有没有比先进入单独的poll()/ recvfrom()循环更好的方法?有些socket API调用可能吗?便携式,甚至?:-)



1> JayG..:

在空闲时,您可以通过将接收缓冲区大小设置为零来禁用套接字:

 int optval = 0; /* May need to be 1 on some platforms */

 setsockopt(sockDesc, SOL_SOCKET, SO_RCVBUF, (char *)(&optval), sizeof(optval));

通过将"optval"设置为更大的缓冲区(例如4096)来重新启用.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有