Uma maneira mais elegante de usar recv () e vetor <char não assinado>

Até agora, eu tenho este exemplo de código:

...
int nbytes =0;
vector<unsigned char> buffer;
buffer.resize(5000);
nbytes = recv(socket, &buffer[0], buffer.size(),0);
//since I want to use buffer.size() to know data length in buffer I do
...
buffer.resize(nbytes);

É alguma outra maneira, saber o comprimento dos dados no buffer sem usar redimensionar () duas vezes? Porque não é possível receber dados em vetor que não sejam redimensionados para o tamanho adequado. Eu acho que o método reserve () não faz alocação, de acordo com a documentação do C ++ STL. E outra pergunta: usar esse tipo de técnica é seguro para vazamentos de memória?

questionAnswers(5)

yourAnswerToTheQuestion