1. 程式人生 > >使用boost庫,無法釋放udp端口的問題

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

timeout udp端口 p s image logs 來講 red 本地 spa

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

代碼如下

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

技術分享

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

            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<boost::asio::ip::udp::socket>不能直接處理,後來找到一個方法轉化成本地socket

closesocket(it->second->trans_redirect_socket->native());

於是就能正常釋放udp端口了

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