gpt4 book ai didi

sockets - 接收缓冲区不匹配返回字节

转载 作者:行者123 更新时间:2023-12-03 11:56:26 24 4
gpt4 key购买 nike

recv 套接字调用的缓冲区是否可能与调用返回的字节数不匹配?例如:

const int len = 1024;
char buf[len];
int bytes = recv(socket, buf, len, 0);

这不应该总是正确的吗:strlen(buf) = bytes

谢谢

编辑1:

我应该注意,我知道 recv 可以返回小于分配的缓冲区大小。我正在尝试测量 recv 调用后缓冲区中的字节数。这不是二进制消息。谢谢。

最佳答案

strlen 只计算(不包括)第一个 '\0'recv 返回的数据可能有几个 '\0' 字符 - 或者根本没有。所以一般来说,这不会是真的 - 如果真的是,那也只是巧合。

附录:

即使有保证的“非二进制”消息,recvstrlen 仍然在计算不同的东西。假设您收到字符串“foobar”——recv 将把字符 'f' 'o' 'o' 'b' 'a' 'r' '\0'进入缓冲区并返回 7,对结果调用 strlen 将返回 6。

还要注意,在这种情况下,因为 recv 可以返回一个短值,所以结果甚至不能保证是一个有效的字符串 - 比如 recv 决定只给出你 3 个字符:然后它会将 'f' 'o' 'o' 放入缓冲区并返回 3。对此调用 strlen 将给出不确定的结果,因为 recv 没有写字符串终止符。

关于sockets - 接收缓冲区不匹配返回字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2196178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com