什么是关闭boost :: asio :: ssl :: stream的正确方法

时间:2017-05-01 18:03:00

标签: c++ sockets ssl boost boost-asio

我使用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来调试应用程序,但错误仍然存​​在。

为什么会发生这种情况,我该如何避免呢?

0 个答案:

没有答案