Я построил сервер Winsock2.Часть этой программы имеет функцию, которая получает данные от клиентов.Первоначально созданная мной функция приема смотрела на входящие данные и определяла, есть ли какие-либо дополнительные данные для чтения, прежде чем recv()
сможет извлечь данные из буфера.Это отлично работало в начале проекта, но сейчас я работаю над повышением производительности.
Вот часть кода, которую я написал, чтобы исключить использование peek:
unsigned char recv_buffer[4096];
unsigned char *pComplete_buffer = malloc(sizeof(recv_buffer) * sizeof(unsigned char*));
int offset = 0;
int i = 0;
...
for (i; i <= sizeof(recv_buffer); i++) {
if (recv_buffer[i] == NULL) {
break;
}
pComplete_buffer[offset] = recv_buffer[i];
offset++;
}
...
Этот код будет отлично работать, но проблема в том, что NULL == 0
.Если клиент отправит 0
, этот цикл преждевременно прервется.Я думал, что был бы умен и оставил бы данные неинициализированными до 0xcc
и использовал бы это, чтобы определить конец recv_buffer
, но кажется, что клиенты иногда также отправляют это как часть своих данных.
Вопрос:
Есть ли символ, который я могу инициализировать recv_buffer
, чтобы надежно сломать его?
Если нет, есть ли другой способ, которым я могу исключить использование peek?