C 如何在linux中清除套接字缓冲区

C 如何在linux中清除套接字缓冲区,c,linux,sockets,buffer,C,Linux,Sockets,Buffer,我有一个关于套接字编程的问题。我想清除套接字缓冲区。 我尝试了以下代码: int ret_read = read(return_events[index].data.fd, recv_buffer, sizeof(recv_buffer)); if(-1 == ret_read) { if(EAGAIN != errno) { printf("read data from %d error occured, errno=%d, %s.\n", return_eve

我有一个关于套接字编程的问题。我想清除套接字缓冲区。 我尝试了以下代码:

int ret_read = read(return_events[index].data.fd, recv_buffer, sizeof(recv_buffer));
if(-1 == ret_read)
{
    if(EAGAIN != errno)
    {
        printf("read data from %d error occured, errno=%d, %s.\n", return_events[index].data.fd, errno, strerror(errno));
        /**
        Tag-position, I know buffer is not empty. I wonder clear buffer in code position.The buffer is socket recv buffer, is not recv_buffer.
        */
    }
    continue;
}
我不想在标记位置再次使用
read()
,因为我想将缓冲区设置为空。虽然在标记位置使用
read()
,但我认为它可能会失败


除了标签位置的
read()
,还有谁能告诉我其他方法吗?

它与其他缓冲区没有什么不同

 bzero(recv_buffer, sizeof(recv_buffer));

你想澄清为什么?您的意思是要清除自己的
接收缓冲区
,还是要清除套接字接收缓冲区?“标签位置”是什么意思?当您刚刚收到来自
recv()
的错误时,是什么让您认为缓冲区是非空的?我有似曾相识的感觉。几个小时/一天前也有人问过同样的问题。除了从套接字接收缓冲区读取数据外,没有其他方法可以清除它。你还没有回答我的另外三个问题。1)你没有提供答案。2) 你没有清楚地说明你的意思3)你在几个小时/几天前已经发布了相同的问题。4)
errno==EAGAIN
仅适用于文件未阻塞(
O_NONBLOCK
)。默认情况下,读取是阻塞的,您不会提供显示不同的信息。5)如果
recv\u buffer
的地址无效,您将调用未定义的行为->所有混乱,您仍然会丢失。即使报告了iff:它不是
EAGAIN
,您的下一次迭代将使用-什么?相同(错误)的地址。嗯,好吧,在再次阅读问题后,这可能是一个选择。无论如何,你不应该回答这样不清楚的问题。相反,删除一条注释,以获取详细信息/澄清。@Olaf因为套接字只不过是一个文件描述符,所以我只剩下一个选项来选择他所说的“缓冲区”。另外请注意,并非所有在这里提问的人都知道所有正确的术语。是的,这个问题有点不清楚,但可能是因为缺乏经验和经验。@LiadBen Yehuda有两个可能的缓冲区,甚至三个:
recv\u buffer
,套接字接收缓冲区,可能还有套接字发送缓冲区。我应该澄清一下,从代码中我看到了一个选项。无论哪种方式,我的答案都适用于任何需要归零的内存块。我觉得你只是想证明自己是对的。当然,它不适用于应用程序控制下的任何内容。。。但我们不是在谈论它。这让人筋疲力尽。