Я создаю сервер веб-сокетов. Чтобы разобрать кадры, я делаю что-то вроде:
// first fetch the first 2 bytes
result = recv(socket_fd, header_buffer, 2, 0);
где 2 — это длина, которую мне нужно получить для заголовка. Затем проанализируйте его и продолжайте получать как таковой:
// fetch extended payload length - 2 or 8
result = recv(socket_fd, header_extended_buffer, extended, 0);
// fetch masking key, 4
result = recv(socket_fd, header_masking_key_buffer, 4, 0);
// fetch payload
result = recv(socket_fd, payload_buffer, payload_size, 0);
Вопрос, возможно ли, что это не всегда будет работать? Я знаю, что recv
может получить только первый байт, и когда данные станут доступны, он отправит несколько дополнительных байтов.
Нужно ли отслеживать это и конкатенировать с каждым из разных буферов по мере того, как данные становятся доступными в recv? Любые подсказки?