【发布时间】:2013-07-28 15:06:37
【问题描述】:
我正在使用 IMAP 服务器,其中一项操作是升级连接以使用 TLS(通过 STARTTLS 命令)。我们当前的架构有一个 goroutine 从套接字读取数据,解析命令,然后通过通道发送逻辑命令。另一个 goroutine 从该通道读取并执行命令。总的来说,这很有效。
但是,当执行STARTTLS 时,我们需要停止当前正在进行的Read() 调用,否则Read() 将消耗来自TLS 握手的字节。我们可以在两者之间插入另一个类,但随后该类将在 Read() 调用中被阻止,并且我们遇到了同样的问题。如果网络连接是一个通道,我们可以添加另一个信号通道并使用 select{} 块来停止读取,但网络连接不是通道(只需将其包装在一个 goroutine 中,通道只是将问题转移到该 goroutine) .
有什么方法可以在 Read() 呼叫开始后停止它,而无需等待超时或类似的东西?
【问题讨论】: