这是我的场景。我有一个与服务器交谈的TCP客户端。服务器和客户端都在本地计算机上运行(Windows)。获取套接字中可读取的字节数
对话框云一样的东西:
- 客户端将数据发送到服务器(请求)
- 客户端通过读取调用
- 客户端块不关机发送插座上响应
- 服务器接收该数据,处理和发送回的响应(一个镜头,不破碎成块)
- 服务器确实关闭用于发送在插座上
- 客户端收到响应,并继续处理。
在步骤3中,我使用recv()调用来阻塞并从套接字读取数据。在这一点上,我想查看有多少字节的数据可用,以便我可以分配这么多的内存。 通过设计,我们知道服务器已经发送了所有的数据,并且没有更多的数据可以发送这个请求。 (请参阅上面的第5步)。
我试图与MSG_PEEK选项的recv(),但似乎并没有给可用的字节总数。
有没有办法检索它?
在此先感谢。
仅仅因为服务器已经发送了所有的数据,这并不意味着它将全部到达同一时间。仅仅因为recv()返回并不意味着你拥有了一切。你应该继续调用recv()直到in,表示没有任何东西返回0 – 2012-02-02 07:31:23
我在这里讲的是无知,但我怀疑答案是否定的,因为内核无法知道字节总数,直到它有收到所有的数据包。直到客户询问后才可能发生这种情况。所以你可以希望的最好是一个下限,这是MSG_PEEK给你的。 – 2012-02-02 07:33:56