在使用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端口了
时间: 2024-11-10 08:09:15