我正在 IMAP 服务器上工作,其中一项操作是升级连接以使用 TLS(通过STARTTLS
命令)。我们当前的架构有一个 goroutine 从套接字读取数据,解析命令,然后通过通道发送逻辑命令。另一个 goroutine 从该通道读取并执行命令。这在一般情况下效果很好。
STARTTLS
但是,在执行时,我们需要停止当前正在进行的Read()
调用,否则Read()
会消耗 TLS 握手中的字节。我们可以在两者之间插入另一个类,但是该类将在Read()
调用时被阻塞,我们遇到了同样的问题。如果网络连接是一个通道,我们可以添加另一个信号通道并使用一个select{}
块来停止读取,但网络连接不是通道(并且简单地将它包装在一个 goroutine 中,通道只是将问题移到那个 goroutine 上)。
有没有办法在Read()
通话开始后停止通话,而无需等待超时到期或类似的事情?
料青山看我应如是
慕森卡
相关分类