您好我设计了一个代码来获取插入套接字的未知数据的长度 我需要帮助,因为我无法找到我的代码卡在此函数中的位置。 谢谢你的帮助
int recvlen(int s){ //peak all received data and returns the length
char *request;
int total;
total= 1024;//initial size
int numbytes;
printf("\n entered recvlen\n");
while(1){
if(( request= (char *)realloc(request,sizeof(char)*total+1)) <=0){
fprintf(stderr,"error in realloc no memory or fail");
return -1;
}
if((numbytes= recv(s,request,sizeof(request),MSG_PEEK))==-1){//get request
fprintf(stderr,"\n error in receiveall \n");
free(request);
return -1;
}
if(numbytes != strlen(request)){
total = numbytes+1;
free(request);
printf("\n recvlen returned total: %d\n",total);
return total;//when the size is found
}
total += total;
}
}
答案 0 :(得分:1)
我找不到我的代码卡在此函数中的位置
它不会“卡住”。它永远循环,因为你实际上没有阅读任何东西,因为你使用了MSG_PEEK
。解决方案:不要。
NB if(numbytes != strlen(request)){
没有任何意义。无法保证request
永远无效:在任何情况下,测试似乎毫无意义。
答案 1 :(得分:0)
我认为您的软件设计错误,为什么 有一会儿(1), 当你调用recv(s,request,sizeof(request),MSG_PEEK)) 你将获得recv队列中的字节数,然后你必须从数组中读取字节。如果你不读,recv队列将重载,而(1)永远不会完成