接收未知数据长度的C套接字编程

时间:2017-03-29 01:15:12

标签: c sockets recv content-length

您好我设计了一个代码来获取插入套接字的未知数据的长度 我需要帮助,因为我无法找到我的代码卡在此函数中的位置。 谢谢你的帮助

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;
  }
    }

2 个答案:

答案 0 :(得分:1)

  

我找不到我的代码卡在此函数中的位置

它不会“卡住”。它永远循环,因为你实际上没有阅读任何东西,因为你使用了MSG_PEEK。解决方案:不要。

NB if(numbytes != strlen(request)){没有任何意义。无法保证request永远无效:在任何情况下,测试似乎毫无意义。

答案 1 :(得分:0)

我认为您的软件设计错误,为什么 有一会儿(1), 当你调用recv(s,request,sizeof(request),MSG_PEEK)) 你将获得recv队列中的字节数,然后你必须从数组中读取字节。如果你不读,recv队列将重载,而(1)永远不会完成