我正在构建一个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下可用时,使用不同的缓冲区?
是的。
我会使用一个逐字节的状态机,但也许这只是我自己…