读取数据使用读取功能

问题描述:

我试图使用数据下面的代码从套接字读取:读取数据使用读取功能

n = read(fd, buffer, 50000); 

的问题是:当从网络服务器中的数据比TCP封装尺寸较大,这些数据将被分成多个包。在这种情况下,read函数只是从fd读取一个数据包,或者它会读取fd中的所有包?

请注意,读取函数只被调用一次。

+0

你用什么语言编程? – 2011-02-25 15:24:21

+0

我的编程语言是C++ – cheng 2011-02-25 15:28:59

由于您使用的是TCP,因此您的套接字类型为SOCK_STREAM。 A SOCK_STREAM套接字是一个字节流,并且不维护数据包边界,因此如果接收到多个数据包并且缓冲区中有足够空间,对read()recv()的调用将读取来自多个数据包的数据。如果缓冲区的大小不足以容纳所有数据,它也可能从数据包的一部分返回数据。下一个read()将继续读取下一个字节。

功能read接收最大字节指定计数,在你的榜样50000

当函数返回read,您需要检查返回值。写入缓冲区的实际字节数在变量n中。