我是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