Boost.Asio应用程序在创建接收器对象时抛出异常

Boost.Asio app throws exception when creating an acceptor object

本文关键字:对象 抛出异常 接收器 创建 Asio 应用程序 Boost      更新时间:2023-10-16

我正在www.highscore.de上做一个关于Boost.Asio的教程。这是我尝试运行的示例:

#include <boost/asio.hpp>
#include <string>
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 80);
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
boost::asio::ip::tcp::socket sock(io_service);
std::string data = "HTTP/1.1 200 OKrnContent-Length: 13rnrnHello, world!";
void write_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
}
void accept_handler(const boost::system::error_code &ec)
{
    if (!ec)
    {
        boost::asio::async_write(sock, boost::asio::buffer(data), write_handler);
    }
}
int main()
{
    acceptor.listen();
    acceptor.async_accept(sock, accept_handler);
    io_service.run();
} 

但每次它在这条线上抛出异常:

boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);

查看堆栈跟踪,basic_socket_acceptor内的这行抛出:

boost::asio::detail::throw_error(ec, "bind");

有人知道为什么吗?

如果您能够捕获异常,那么您可能会通过调用what()方法获得更多信息。如果您将所有这些全局变量移动到一个函数中并从那里运行,您会发现这更容易。这样,您可以更容易地捕获异常。

也就是说,在大多数系统上,您不允许作为非特权用户绑定到端口80。试试别的,看看你是否运气好。