Una forma más elegante de usar recv () y vector <unsigned char>

Hasta ahora, tengo este ejemplo 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);

¿Es de alguna otra manera, conocer la longitud de los datos en el búfer sin usar resize () dos veces? Porque no es posible recibir datos en el vector que no se redimensiona al tamaño adecuado. Creo que el método reserve () no hace la asignación, de acuerdo con la documentación de C ++ STL. Y otra pregunta: ¿el uso de este tipo de técnica es a prueba de pérdidas de memoria?

Respuestas a la pregunta(5)

Su respuesta a la pregunta