Boost.Asio应用程序在创建接收器对象时抛出异常
Boost.Asio app throws exception when creating an acceptor object
我正在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。试试别的,看看你是否运气好。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 函数如何通知用户它基于函数原型抛出异常?
- 抛出异常:类型错误:对象不支持属性或方法"createVertexArray"(emscripten)
- 是否可以对构造函数抛出异常的对象进行异常处理,该对象的异常处理接近其基于堆栈的代码创建
- C++:如果抛出异常,那么超出范围的对象将被销毁
- 如果构造函数抛出异常,如何删除对象
- 如果文件在构造函数中不存在,则抛出异常,并在 main() 中创建对象时尝试/捕获它,如果好 - 开始使用该对象
- 抛出异常后,对象内分配的指针是否自动解除分配
- 在C++中抛出异常或返回NULL对象
- C++-如果抛出异常,则执行本地对象的释放
- Boost.Asio应用程序在创建接收器对象时抛出异常
- 有人能确切地解释一下,如果在堆上分配对象数组的过程中抛出异常,会发生什么吗
- 如果在成员中抛出异常,则删除母对象
- 从静态[非动态]对象的c++构造函数抛出异常
- 如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?
- 通过引用抛出异常对象是否合适?
- 抛出异常时是删除静态对象,还是只删除本地对象
- opencv:使用cout与Mat对象抛出异常
- 作为抛出异常对象的结构基类
- 如何捕获用花括号初始化的对象抛出的异常?