我正在Linux下编写一个C/C++应用程序,它从原始套接字读取数据(用于ICMP数据包).问题:有没有办法丢弃仍然在套接字上排队的所有数据?
问题是睡了一会儿之后,插座上排队的数据我不感兴趣; 所以最好只告诉套接字"忘记你现在缓冲的所有数据",这样如果我进入select()/ recvfrom()循环,那么我只得到最近收到的数据.
有没有比先进入单独的poll()/ recvfrom()循环更好的方法?有些socket API调用可能吗?便携式,甚至?:-)
在空闲时,您可以通过将接收缓冲区大小设置为零来禁用套接字:
int optval = 0; /* May need to be 1 on some platforms */ setsockopt(sockDesc, SOL_SOCKET, SO_RCVBUF, (char *)(&optval), sizeof(optval));
通过将"optval"设置为更大的缓冲区(例如4096)来重新启用.