我希望在某些条件下使用数据报从POCO网络中清楚地解释此函数中发生的情况。
int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
/// Receives data from the socket and stores it
/// in buffer. Up to length bytes are received.
/// Stores the address of the sender in address.
///
/// Returns the number of bytes received.
我想知道传递给函数的缓冲区是否小于数据报,这个函数会读取它可以进入缓冲区的内容并保留额外的数据以便后续从函数接收吗?
到目前为止,我一直在传递一个与传入数据大小相匹配的缓冲区,但我不确定此函数的精确行为;
size参数小于缓冲区或
传入数据的大小大于缓冲区
size参数大于传入数据。
如果有人知道这些细节,那将很高兴知道。
干杯
答案 0 :(得分:1)
size参数小于缓冲区
它是C代码,函数不知道缓冲区的大小,这就是你必须告诉它大小的原因。使用小于缓冲区的大小意味着该函数将仅使用您告诉它的空间而不是完整的缓冲区。
传入数据的大小大于缓冲区
当你打电话给你时,你会得到一个充满数据的缓冲区,你读过的数据将在下次读取时返回。当您拥有可以发送不同大小的邮件的代码时,通常会在包含完整邮件长度的邮件上放置一个固定大小的标头。接收器然后读取标头并确定读取多少以获得完整的消息。
size参数大于传入数据。
该函数告诉您它读取了多少数据。当缓冲区大于读取的数量时,缓冲区的未使用部分不受影响。