【发布时间】:2011-05-29 10:00:15
【问题描述】:
我有以下问题:这是代码块:
void get_all_buf(int sock, std::string & inStr) {
int n = 1;
char c;
char temp[1024*1024];
bzero(temp, sizeof(temp));
n = recv(sock, temp, sizeof(temp), 0);
inStr = temp;
};
但有时recv 不会返回整个数据(数据长度总是小于sizeof(temp)),只是它的一部分。写入方总是向我发送整个数据(我是通过嗅探器得到的)。有什么关系?谢谢。
P.S.我知道,礼貌建议我检查n (if (n < 0) perror ("error while receiving data")),但现在没关系 - 这不是我的问题的原因。
P.S.2我忘了 - 它正在阻塞套接字。
【问题讨论】:
-
好的方式也建议检查您的输入。如果您收到的内容中没有 \0,那么充其量您的程序可能会崩溃,更糟糕的是,您可以获得一个精心制作的无效字符串,该字符串会利用该程序并 pwn 系统以获得乐趣和利润。
-
std::string?那么这是一个 C++ 问题,而不是 C 问题。
标签: c++ linux network-programming recv