::recv() и std::string
От: _chill Россия  
Дата: 26.11.04 17:36
Оценка:
Вот хочу принять данные с помошью блокирующего сокета и функции recv и положить их в std::string

Это выглядит примерно так:
std::string mySocket::recive()
{
   int i_ret = 0;
   char *buf[100];
   std::string result;

   while(true)
   {
      i_ret = ::recv(this->sock, buf, sizeof(buf),0);
      if(i_ret == 0)
      {
          throw(SocketExeption("Connection has been gracefully closed"));
      }
      if(i_ret == SOCKET_SRROR)
      {
          throw(SocketExeption("recv error"));
      }
      result += buf;
   }
   return result;
}

Я прекрасно понимаю почему на этом методе программа "подвисает", сокет ведь не переведен в неблокирующий режим и я не собираюсь его переводить в этот режим.
Как-нибудь можно узнать есть ли в системном буфере еще какие-нибудь данные или прием данных уже следует окончить?
Просто хочу чтобы все данные с сокета считались и метод вернул управление, но как это сделать не знаю...
Подскажите, пожалуйста...

Заранее спасибо, с уважением Chill
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.