【发布时间】:2014-01-08 12:44:39
【问题描述】:
下面的伪代码解释了我所面临的情况
服务器端
while (<some condition>)
{
// wait for SSL connection
acceptor.async_accept();
// wait until connection
io_service.run();
// perform handshake
ssl_socket.handhake();
// handshake successfully complete, start command manager thread
pthread_create();
io_service.reset();
// Go for the new connection waiting
}
这里的问题是我能够连接两个客户端,但不能同时连接。 1 个连接到达之后,握手和证书验证需要 40-50 毫秒,因此,中间的任何连接请求都会失败。
更新:
有什么方法可以在握手过程中停止监听客户端问候?
我必须为每个循环创建新的io_service 实例,因为我可能想使用io_service.stop() 调用取消特定线程。 boost 还有其他选择吗?
【问题讨论】:
-
当 TCP 握手在 OS 内核中完成以便 accept() 返回连接的套接字时,SSL 握手在用户空间中完成。这意味着在 socket.handshake() 中,应用程序将等待 SSL 客户端打招呼,执行某种昂贵的加密操作,然后发送 SSL 服务器打招呼。这需要一些时间,而且行为不端的客户端可能会因为在初始 TCP 连接后不发送任何内容而导致握手停止。
-
感谢@SteffenUllrich,如果您有任何方法,请提出克服这种情况的方法。我是新手。
-
我自己不使用 boost,但 SSL 处理在各种语言之间并没有太大区别。也许在这种情况下,就像将 SSL 握手移动到新创建的线程中一样简单,而不是在主线程中进行。
-
感谢@Steffen 的所有帮助.. J
标签: c++ boost ssl client-server boost-asio