我正在Linux下编写一个从TCP套接字获取数据的接口。用户提供一个缓冲区,在其中存储接收到的数据。如果提供的缓冲区太小,我只想返回一个错误。第一个问题是确定缓冲区是否过小。recv()函数仅向我返回实际写入缓冲区的字节数。如果我使用recv()联机帮助页上所述的MSG_TRUNC标志,它仍然返回相同的内容。第二个问题是丢弃仍在套接字中排队的数据。因此,如果我确定提供的Buffer很小,我只想擦除套接字上剩余的所有内容。除了重新关闭并打开套接字,或者只是接收直到什么都没剩下,还有其他方法吗?最好的问候<
一个建议是只是recv直到什么都没剩下(我返回0)-但是这样做最终不必等待预设的超时(在这种情况下是5秒?),因为每次我调用recv时,它都会等待数据或超时?
在TCP级别上,不知道什么构成应用协议消息。但是,有两种最常见的方法来分隔TCP流中的消息:
因此,一个通用的TCP读取器应该提供两个通用的读取功能:
类似于Tornado IOStream读取功能的设计也可以。