使用boost庫,無法釋放udp端口的問題
阿新 • • 發佈:2017-08-18
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端口的問題