我使用boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
作为服务器端SSL-Socket。有时,我需要关闭与客户端的连接。在this question的答案中,它说:
对
shutdown()
和ssl::stream
进行lowest_layer()
调用是最干净的 它的this->_sslSocket.shutdown(); this->_sslSocket.lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, shutdown_error); this->_sslSocket.lowest_layer().close();
。第一个结束SSL连接,第二个结束 结束TCP连接。
我把它变成了代码:
block :: a -> a -> Int -> Int -> [[a]]
block stream interloper width = go
where go 0 = [replicate width interloper]
go n = (replicate width interloper ++ replicate n stream)
: ((stream :) <$> go (n - 1))
placeOneBlock :: Int -> Int -> [String]
placeOneBlock = block 'e' 'f'
但是,其中一个调用总是产生错误:&#34; shutdown:文件结束&#34;。我确信客户端不是问题,因为我使用OpenSSL's s_client来调试应用程序,但错误仍然存在。
为什么会发生这种情况,我该如何避免呢?