Вот хочу принять данные с помошью блокирующего сокета и функции 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