該循環應該從套接字中逐行讀取數據並將其放入緩衝區中。出於某種原因,當沒有新數據要返回時,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