我正在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 OK\r\nContent-Length: 13\r\n\r\nHello, 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");
有谁知道为什么?
答案 0 :(得分:2)
如果你能捕获异常,你可能会通过调用what()
方法获得更多信息。如果将所有这些全局变量移动到函数中并从那里运行,您会发现这更容易。这样,您就可以更轻松地捕获异常。
也就是说,在大多数系统上,您不能作为非特权用户绑定到端口80。尝试其他的东西,看看你是否有更多的运气。