【发布时间】:2021-05-11 08:26:32
【问题描述】:
我试图从高层次上理解 recv()。所以 recv 以“块”的形式获取数据,但我仍然不知道它是如何被精确处理的。示例:
char buffer[1000];
int received= recv(sock, buffer, sizeof(buffer), 0)
这是否意味着如果我正在接收大量文件,缓冲区,如果通过 sock 连接可能会反映它在接收变量中存储了 500 个字节,然后在循环中接收另外 300 个字节和所有 800 个字节的数据将在循环结束时存储在缓冲区中(丢失在接收到的变量中,除非考虑在内),或者缓冲区是否需要一个指针来跟踪它上次接收数据的位置以便在下一次迭代中存储它?
【问题讨论】:
-
不确定我是否完全遵循您的问题,但
recv不会自行循环。您需要这样做,以及将数据块重新组合成最终应用程序数据所需的任何簿记。所有recv所做的和类似的事情是将原始数据从套接字传递到应用程序。 man page 可以告诉你更多。 -
不,这不会发生。当modem接收到数据时,将数据存储在自己的栈中,recv只是读取这个栈并更新栈指针。
标签: c linux sockets serversocket