Finora, ho questo codice di esempio:Un modo più elegante per usare recv() e vettoriale <unsigned char>
...
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);
E 'un po' un altro modo, di conoscere la lunghezza dei dati nel buffer senza utilizzare ridimensionare () due volte? Perché non è possibile ricevere dati nel vettore che non viene ridimensionato alla dimensione corretta. Penso che il metodo reserve() non faccia l'allocazione, secondo la documentazione di C++ STL. E un'altra domanda: usare questo tipo di tecnica è una perdita di memoria sicura?
Inoltre, se è di aiuto, è possibile passare MSG_PEEK al parametro flags di recv() per scoprire quanti byte ci sono effettivamente. –
In realtà, non è molto utile ridimensionare il messaggio ricevuto. Basta smetterla, gestirla, rispondere ad essa e aspettare il prossimo. O stai memorizzando le tue richieste binarie? – stefaanv
Ridimensiono il buffer dopo aver ricevuto i messaggi, perché è comodo usare buffer.size() invece di qualche altra variabile, che contiene la lunghezza effettiva del buffer, in altre funzioni per sapere quanto è grande il messaggio. –