有没有办法交出TCP连接?

时间:2014-09-15 21:12:01

标签: tcp imap

我们正在创建一个位于邮件客户端和处理IMAP调用的邮件服务器之间的Web应用程序(我们主要关注SELECT和LIST)。但是当用户执行FETCH时,我们希望返回的数据不会通过我们的服务器,以减少我们的带宽使用。

我们有办法将请求交给直接吗?或者改变它以使响应直接发送给发起者?

(我们在C#中这样做虽然我怀疑这与这个问题有关。)

1 个答案:

答案 0 :(得分:0)

这不起作用,原因有三:

  1. IMAP是异步的,一次可以有多个命令,因此客户端可以发出FETCH然后发出其他命令,包括LIST,同时等待{{1完成。

  2. 即使客户端一次只发送一个命令,您仍然需要继续监控连接以了解FETCH何时完成,以便您可以切换回FETCH处理。

  3. 您的应用有两个独立的TCP连接 - 一个位于自身和客户端之间,一个位于自身和服务器之间。无法将这些连接链接在一起以从该链中删除您的应用。如果您的应用想要退出,则必须关闭这些连接。

  4. 所以不,你不能"交出"数据。只要您的应用已连接到客户端和服务器,无论您是否处理,所有数据都必须在您的应用中流动。这只是TCP代理/隧道运行方式的本质。