このループは、ソケットから行ごとにデータを取得し、それをバッファーに入れることになっています。何らかの理由で、返す新しいデータがない場合、recv は取得した最後の数行を返します。最初の 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
}