gpt4 book ai didi

c++ - boost Asio 错误

转载 作者:行者123 更新时间:2023-11-30 03:58:05 25 4
gpt4 key购买 nike

我试过看看是否有其他人遇到这个问题,但我还没有在网上找到任何东西。这段代码中有什么地方看起来像是我错误地调用了 boost 吗?

此代码在我登录到启动 TCP 服务器的机器时有效,但在没有人登录时失败。我将代码剥离以仅查看 boost asio 逻辑。

//create _acceptor, which will eventually listen for incomming connections, asynchronously
_acceptor = boost::shared_ptr<tcp::acceptor>(new tcp::acceptor(*_io_service));
_acceptor->open(tcp::endpoint(tcp::v4(), _port).protocol());
_acceptor->set_option(tcp::acceptor::reuse_address(false));

//omitted logic find a port that is open
_acceptor->bind(tcp::endpoint(tcp::v4(), _port));

//omitted error handling logic if open port not found

//Start listening for incoming connections asynchronously.
_acceptor->listen();

sslSocketPtr ssl_socket(sslSocketPtr(new ssl::stream<ip::tcp::socket>(*_io_service, _sslContext)));
_acceptor->async_accept(ssl_socket->lowest_layer(),
boost::bind(&TCPServer::handle_sslAccept, shared_from_this(), boost::asio::placeholders::error, ssl_socket));

当没有人登录机器时,ssl_socket 构造函数抛出异常:“static_mutex:访问被拒绝”。

如果我定义了 BOOST_ASIO_ENABLE_OLD_SSL,则代码可以正常工作,但我认为这可能会导致我的代码中出现另一个错误。所以我正在尝试使用 Boost 的最新 SSL 逻辑。

如有任何帮助,我们将不胜感激!

最佳答案

我将根据您在 Windows 上运行的症状进行假设。

在 Windows 上,static_mutex 被实现为命名(进程间)互斥锁,并使用 CreateMutexW “打开” :

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError returns ERROR_ALREADY_EXISTS, bInitialOwner is ignored, and the calling thread is not granted ownership. However, if the caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.

如您所见,您没有所需的权限。但是,如果互斥量总是由特权进程创建,您仍然可以使用它。在这种情况下,您可以按照文档提示使用 OpenMutex 修改打开现有命名互斥体的代码。

认为在具有所需权限的用户下运行该过程可能更容易

关于c++ - boost Asio 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com