c-网络套接字、碎片和通过recv的可用数据



我正在构建一个websocket服务器。为了解析帧,我正在做一些类似的事情:

// 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下数据可用时连接到每个不同的缓冲区?有什么提示吗?

我是否需要跟踪并连接到当数据在recv下可用时,使用不同的缓冲区?

是的。

我会使用一个逐字节的状态机,但也许这只是我自己…

最新更新