码迷,mamicode.com
首页 > 其他好文 > 详细

使用boost库,无法释放udp端口的问题

时间:2017-08-18 11:50:49      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:shared   成本   eof   不能   方法   ati   ndt   direct   ptr   

在使用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端口的问题

标签:shared   成本   eof   不能   方法   ati   ndt   direct   ptr   

原文地址:http://www.cnblogs.com/baldermurphy/p/7388769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!