我是C++的新手(来自C)。我从概念上理解RAII应该如何工作,但我无法在其中安装一个简单的套接字连接处理程序。如何使用RAII模拟套接字
当前代码:
void accept_ev(event_handler::token &t, int listenfd)
{
int newfd = accept(listenfd, NULL, NULL);
if (newfd < 0)
throw api_server_accept_failed(*this, errno);
connections.insert(api_server_connection(newfd));
}
这显然不是安全的,因为api_server_connection构造可能分配FD其成员变量之前抛出异常。
所以我的下一个想法是将接受移入构造函数。问题是我真的希望api_server_connection对fd来自何处不可知。例如。如果我想在未来支持inetd,那么它可能只是作为fd 0传入程序。
那么,我该如何做到这一点。我应该使用不同的构造函数来获取fd吗?我是否应该制作子类?另一个选择可能是有一个lambda函数?
或者我应该只是在这种情况下发现任何错误并关闭调用者中的fd?
你看过/阅读过关于[Boost ASIO](http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio.html)的工作原理吗? (你有没有考虑完全跳过这个,只是使用ASIO?) – 2012-04-26 19:29:40
'api_server_connection'如何引发异常?您没有向我们显示该代码。 – 2012-04-26 19:30:01
@ R.MartinhoFernandes我还没有写它......但我知道它会有pimpl,这意味着内存分配,这可能会失败。 – 2012-04-26 19:43:59