使用boost庫,無法釋放udp埠的問題

2022-05-05 13:48:07 字數 1379 閱讀 6467

在使用boost的socket封裝庫的時候,遇見乙個奇怪的問題,就是關閉boost的udp socket,但是 udp的埠一直沒有釋放,這是乙個很嚴重的問題,因為對於伺服器來講,由於一直執行,埠沒釋放會導致埠越來越少嗎,最後沒埠用

**如下

網上說要配置位址可重用,於是試了一把

int nnettimeout = 3

;

result = setsockopt(native_sock, sol_socket,so_sndtimeo,(char *)&nnettimeout, sizeof(int

)); result = setsockopt(native_sock, sol_socket, so_reuseaddr, (char *)&nnettimeout, sizeof(int

)); bool bdontlinger =false;

setsockopt(native_sock, sol_socket, so_dontlinger, (

const

char*)&bdontlinger, sizeof(bool));

一樣的沒辦法釋放

後來發覺closesocket可以正常的釋放

可是boost::shared_ptr不能直接處理,後來找到乙個方法轉化成本地socket

closesocket(it->second->trans_redirect_socket->native());
於是就能正常釋放udp埠了

更新

trans_redirect_socket->shutdown(boost::asio::ip::udp::socket::shutdown_both);

trans_redirect_socket->close();

這樣也是可以的

trans_redirect_socket->shutdown(boost::asio::ip::udp::socket::shutdown_both);是關閉接收傳送資源,就像家裡的燈的開關,只是關閉,還可以開啟,電源還在,開關還在,沒有完全銷毀
trans_redirect_socket->close();關閉socket,就相當於把家裡的開關直接拆了,拆了除非你重新安裝乙個開關,才能使用

Boost庫使用總結

智慧型指標,與引用計數相關 auto ptr 主要為異常安全設計的,在程式正常退出或者異常終止,會呼叫類的析構函式,釋放資源。複製 賦值是損壞性的操作,所以不能繫結到陣列或者變數指標,也不能將auto ptr物件儲存在容器中。auto ptra new int 10 auto ptrb b.rese...

Boost庫的使用

fatal error c1083 無法開啟包括檔案 boost shared ptr.hpp no such file or directory它由c 標準委員會部分成員所設立的boost社群開發並維護,使用了許多現代c 程式設計技術,內容涵蓋字串處理 正規表示式 容器與資料結構 併發程式設計 函...

Boost庫使用 date time類庫

boost庫中使用了timer date time chrono處理時間與日期的問題。在上層開發中,經常碰到不同時間體系的處理,如格里高利歷 utc等,date time解決了大部分蕾絲的問題,是乙個較為全面 靈活的時間和日期類庫,並且可以與c的傳統時間結構tm相互轉換,提供底層支援。date ti...