recv套接字调用缓冲区是否可能与调用返回的字节数不匹配?例如:
const int len = 1024;
char buf[len];
int bytes = recv(socket, buf, len, 0);
Run Code Online (Sandbox Code Playgroud)
这不应该是真的:strlen(buf) = bytes?
谢谢
EDIT1:
我应该注意,我知道recv可以返回小于缓冲区的分配大小.我试图在recv调用后测量缓冲区中的字节数.这不是二进制消息.谢谢.
strlen只计算(不包括)第一个'\0'.返回的数据recv可能包含多个'\0'字符 - 或者根本没有.所以总的来说,它不会是真的 - 如果它永远存在,那将是巧合.
附录:
即使有保证的"非二进制"的消息,recv并且strlen仍在计算不同的东西.假设您重新接收字符串"foobar" - recv将字符'f' 'o' 'o' 'b' 'a' 'r' '\0'放入缓冲区并返回7,并且调用strlen结果将返回6.
另请注意,在这种情况下,因为recv可以返回一个短值,结果甚至不能保证是一个有效的字符串 - 比如recv决定只给你3个字符:然后它将放入'f' 'o' 'o'缓冲区并返回3.调用strlen此将给出一个不确定的结果,因为recv没有写一个字符串终止符.