该循环应该从套接字中逐行读取数据并将其放入缓冲区中。出于某种原因,当没有新数据要返回时,recv会返回它所得到的最后几条线。我能够通过评论第一个recv来阻止这个bug,但是我不知道下一行会有多长。我知道这是不是一个recv返回旧数据
while(this->connected){
memset(buf, '\0', sizeof(buf));
recv(this->sock, buf, sizeof(buf), MSG_PEEK); //get length of next message
ptr = strstr(buf, "\r\n");
if (ptr == NULL) continue;
err = recv(this->sock, buf, (ptr-buf), NULL); //get next message
printf("--%db\n%s\n", err, buf);
tok[0] = strtok(buf, " ");
for(i=1;tok[i-1]!=NULL;i++) tok[i] = strtok(NULL, " ");
//do more stuff
}
我有2个呼叫recv的,第二个具有设置为0的标志(不MSG_PEEK)。我正在寻找从第一个recv中得到的“\ r \ n”,然后直到第二个recv的“\ r \ n”。不过,我在写这篇文章时发现了我的问题。我需要添加2到第二个recv的长度,所以我会采取“\ r \ n”。 – anon 2010-04-28 09:31:22