gpt4 book ai didi

linux - 判断socket上是否还有Data残留并丢弃

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:28 26 4
gpt4 key购买 nike

我正在 Linux 下编写一个从 TCP 套接字获取数据的接口(interface)。用户提供一个缓冲区,其中存储接收到的数据。如果提供的缓冲区太小,我只想返回一个错误。第一个问题是确定缓冲区是否太小。 recv() 函数只返回实际写入缓冲区的字节数。如果我使用 recv() 联机帮助页上声明的 MSG_TRUNcflags,它仍然会返回相同的结果。第二个问题是丢弃仍在套接字中排队的数据。因此,如果我确定我提供的缓冲区太小,我只想删除套接字上留下的所有内容。除了关闭并再次打开套接字或只接收直到什么都不剩下,还有其他方法吗?最好的问候 <

一个建议是只 recv 直到什么都不剩(我返回 0 )——但这不会以等待预设超时(在本例中是 5 秒吗?)结束,因为每次我调用 recv 它都会等待数据还是超时?

最佳答案

在 TCP 级别上并不知道什么构成应用程序协议(protocol)消息。然而,有两种最常用的方法来分隔 TCP 流中的消息:

  • 在消息前加上它们的大小并读取那么多字节,或者
  • 读取直到找到特定的字节序列。

从这个角度来看,一个通用的 TCP 阅读器应该提供两个通用的阅读功能:

  • 读取N个字节,以及
  • 一直读到定界符被读完

类似于Tornado IOStream的设计阅读功能就可以了。

关于linux - 判断socket上是否还有Data残留并丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com