C++ 从Select调用返回后,在服务器上处理/重新组装TCP分段数据包的方法 客户端应以多段的形式发送大约5K字节的TCP数据(SIP消息) 服务器端重新组装段的最佳方法是什么

C++ 从Select调用返回后,在服务器上处理/重新组装TCP分段数据包的方法 客户端应以多段的形式发送大约5K字节的TCP数据(SIP消息) 服务器端重新组装段的最佳方法是什么,c++,c,linux,network-programming,C++,C,Linux,Network Programming,注: 1.如果这种方法没有数据包嗅探,那就太好了 2.在解决问题时,还需要考虑性能。 3.实施注意事项:C、C++ 我们已经厌倦了在sip协议栈端处理,但结果并不是很好。 因此,考虑是否可以通过在Linux“Select Call”之后实现一个包装器来处理它,该包装器重新组装每个文件描述符上接收的完整数据包并执行进一步的处理。对于SIP消息,您必须至少解析SIP头。 执行recv,直到内容长度中提到的值 如果不解释内容长度,则无法确定SIP消息包的实际长度。通常的“在收到所需的所有字节之前调用r

注: 1.如果这种方法没有数据包嗅探,那就太好了 2.在解决问题时,还需要考虑性能。 3.实施注意事项:C、C++

我们已经厌倦了在sip协议栈端处理,但结果并不是很好。
因此,考虑是否可以通过在Linux“Select Call”之后实现一个包装器来处理它,该包装器重新组装每个文件描述符上接收的完整数据包并执行进一步的处理。

对于SIP消息,您必须至少解析SIP头。 执行recv,直到内容长度中提到的值


如果不解释内容长度,则无法确定SIP消息包的实际长度。

通常的“在收到所需的所有字节之前调用recv()”方法是不够的!你不必重新组装数据包。TCP是一种面向连接的流协议。TCP保证会为您做到这一点。你是说UDP/数据报服务吗?UDP是fire and forget.”是通常的“在收到所需的所有字节之前调用recv()”方法“不够”—是的,不是。由于“recv”调用预计会发生在每个分段上,但不会发生在完成数据包重新组装之后。我认为您可能会对tcp的工作原理感到困惑-tcp没有数据包重新组装这样的事情。相反,字节是按FIFO顺序传递的,没有任何固定的消息边界。如果需要消息框架,则必须根据从recv()调用获得的数据在应用程序级别自行实现。