簡體   English   中英

Boost.Asio socket析構函數關閉連接?

[英]Boost.Asio socket destructor closes connection?

boost::asio::ip::tcp::socket的析構函數到底是做什么的? 我不知道,即使在瀏覽Boost文檔和源代碼之后,如果我需要使用它

socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
socket->close();

在打電話之前

delete socket;

我是否需要手動關閉套接字,或者析構函數是否處理此問題?

當一個插座被破壞,它將作為-如果由封閉socket.close(ec)的插座的破壞期間。

I / O對象(如socket )派生自basic_io_object basic_io_object析構函數中 ,將在I / O對象的I / O服務上調用destroy() ,傳入I / O對象服務將在其上運行的implementation_type實例。 在socket的情況下,將在滿足SocketService類型要求的類型上調用destroy() ,關閉底層套接字。 在下面的文檔中, a是套接字服務類的實例, b是套接字服務類的implementation_type的實例:

a.destroy(b)

[...]隱式取消異步操作,就像調用a.close(b, ec)

a.close(b, ec)

如果a.is_open()為true,則會導致任何未完成的異步操作盡快完成。 取消操作的處理程序應傳遞錯誤代碼error::operation_aborted

發布: !a.is_open(b)

不,你不需要關閉它。 雖然這樣做可能更干凈,但如果要報告協議關閉周圍的任何錯誤。

析構函數只是/出現/是空的,這是Modern C ++的一個好兆頭:

答案已經跳過了shutdown()的問題。 從close()文檔,“關於正常關閉連接套接字的可移植行為,在關閉套接字之前調用shutdown()”。

如果刪除套接字是隱式關閉,則在刪除之前似乎仍然建議調用shutdown()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM