WSARecv and recv
-
Hi. Lets say, we got such 2 scenarios where we are receiving data over a socket: 1. Using
WSARecv
CHAR Buffer[1024];
WSABUF wsaBuffer;
DWORD dwBytesRecved = 0;
wsaBuffer.buf = (char *)Buffer;
wsaBuffer.len = sizeof(Buffer);
OVERLAPPED overLap;
::RtlSecureZeroMemory(&overLap, sizeof(overLap));
DWORD dwFlags = 0;
::WSARecv(sock, &wsaBuffer, 1, &dwBytesRecved, &dwFlags, &overLap, NULL);
wsaBuffer.buf[dwBytesRecved] = '\0';
cout << wsaBuffer.buf << ", Bytes: " << dwBytesRecved << endl;2. And this one, using
recv
CHAR Buffer[1024];
int recved = ::recv(sock, Buffer, size, 0);
Buffer[recved] = '\0';
cout << Buffer << ", Bytes: " << recved << endl;In both cases, we are receiving only one buffer. (WSABUF allows to specify more then 1 recv buffer). And now, in case of recv, i can do something like this: 1. i got my recv buffer size, lets say 1024 bytes and doing recv. 2. Ok, i got some data and its length is 512 bytes and it has been copied to my recv buffer. But i know, that i should receive 1024 bytes of data. 3. So i am going to recv data in a loop until all 1024 bytes arrived. 4. Ok, i got some data again and it seems like it is next 512 bytes, but this time i am calling recv like this:
int recved = ::recv(sock, Buffer + already_received_number_of_bytes, size, 0);
So the rest of received data is appended to my recv buffer and in the end my recv buffer contains all data. The question is: how can i do this with WSARecv ? Thanks.
011011010110000101100011011010000110100101101110 0110010101110011