gpt4 book ai didi

c++ - Boost.Asio 文档不存在。这些错误是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:50 25 4
gpt4 key购买 nike

我在使用 Boost.Asio 时遇到两个错误。

第一个发生在我尝试在套接字上接收数据时:

char reply[1024];
boost::system::error_code error;
size_t reply_length = s.receive(boost::asio::buffer(reply, 1024), 0, error);
if (error) cout << error.message() << endl; //outputs "End of file"

第二个发生在我尝试从(有效!) native 套接字创建 ip::tcp::socket 时:

boost::asio::io_service ioserv;
boost::asio::ip::tcp::socket s(ioserv);

boost::system::error_code error;
s.assign(boost::asio::ip::tcp::v4(), nativeSocket, error);
if (error) cout << error.message() << endl; //outputs "The parameter is incorrect"

由于所有这些麻烦和没有文档可求助,我很想回到 BSD 套接字,但我在那里遇到了我自己的问题......所以如果有人能提供帮助,我将非常感激。

编辑:关于数字 2,nativeSocket 是这样声明的:

SOCKET nativeSocket = INVALID_SOCKET;
nativeSocket = accept(svr_sock, (struct sockaddr*)&sin, &size);

之后,对套接字进行了一些其他操作——即使用 ioctlsocket 将其设置为非阻塞,并对 SO_LINGER 和 SO_OOBINLINE 使用 setsockopt。

最佳答案

无论如何,这都不是您第二个问题的完整解决方案。它生成的任何错误都应映射到 boost::system::error_code , 但我在 boost/system/error_code.hpp 中找不到类似的东西,所以我不知道它到底是什么意思。

但是,在查看 boost 1.39 的代码后,assign最终移交给detail::reactive_socket_service< Protocol, Reactor >.assign (或 detail::win_iocp_socket_service<Protocol> ,如果您使用的是 Windows)。它只能在 boost/asio/detail/reactive_socket_service.hpp 中的两个地方产生错误:

if (is_open(impl))
{
ec = boost::asio::error::already_open;
return ec;
}

if (int err = reactor_.register_descriptor(
native_socket, impl.reactor_data_))
{
ec = boost::system::error_code(err,
boost::asio::error::get_system_category());
return ec;
}

因为,您没有得到 already_open错误,错误必须来自代码的第二位。 react 器类型来自 ifdef 的序列/elifboost/asio/stream_socket_service.hpp , 而那些可用的只有 register_descriptorepoll_reactor 中发挥作用可以抛出任何错误(当然 detail::win_iocp_socket_service<Protocol>.assign 也可以)。 epoll_reactor 中的错误来自sys/epoll.h ,具体来说:

int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
if (result != 0)
return errno;

在windows实现中,相关代码为

if (iocp_service_.register_handle(native_socket.as_handle(), ec))
return ec;

我认为这是您错误的根源,但老实说,我无法追查到这一点。

关于c++ - Boost.Asio 文档不存在。这些错误是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712641/

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