双向TCP多路复用

时间:2014-03-14 06:28:57

标签: c sockets tcp libjingle multiplexing

我在现有的TCP库之上构建了一个简单的多路复用协议。这允许我有多个"频道"在单个TCP连接中。当所有数据都在一个方向发送时,它可以正常工作。例如,我可以在一个频道上发送文件,并在另一个频道上发送消息。当所有数据都向一个方向发送时,一切都很有效:

TCP连接:
频道1 ---文件上传--->通道1 频道2 ---消息------>第2频道

当我尝试向一个方向上传并向另一个方向发送消息时,会出现问题:

频道1 ---文件上传 - >通道1 频道2< ----消息----频道2

文件传输正常,但在文件完成传输之前,消息(通常)不会传输。这是TCP流的已知问题吗?

具体来说,我使用google的libjingle库来建立单个TCP连接(实际上它是一个伪TCP over UDP实现)。我确信消息数据实际上是通过流发送的,但另一方面,在文件在通道1上完成上载之前,不会触发SE_READ事件。

我当然不是TCP专家,非常感谢任何帮助。感谢。

0 个答案:

没有答案