我正在尝试使用套接字中的以下代码读取数据:
n = read(fd, buffer, 50000);
问题是:当来自Web服务器的数据大于tcp包大小时,这些数据将被拆分为多个包。在这种情况下,读取函数只是从fd读取一个数据包,还是会读取fd中的所有包?
请注意,只读一次read函数。
答案 0 :(得分:4)
因为您使用的是TCP,所以套接字的类型为SOCK_STREAM
。 SOCK_STREAM
套接字是一个字节流,不保持数据包边界,因此,如果收到多个数据包,则read()
或recv()
的调用将读取来自多个数据包的数据。缓冲区中有足够的空间。如果缓冲区的大小不足以容纳所有数据,它也可能从数据包的一部分返回数据。下一个read()
将继续读取下一个字节。
答案 1 :(得分:0)
函数read
最多接收指定的字节数,在您的示例50000中。
当函数read
返回时,您需要检查返回值。写入缓冲区的实际字节数在变量n
中。