【发布时间】:2021-11-24 20:26:41
【问题描述】:
您好,我的代码在 Windows 上可以正常工作,但在 linux 上,重新连接功能不起作用,它会抛出带有 WSAEADDRINUSE 值的异常。
pClientSocket = new tcp::socket(*pIO_context, tcp::endpoint(boost::asio::ip::make_address(127.0.0.1, 50001));
第一次它可以在 Windows 和 Linux 上运行,但是当我关闭套接字并尝试再次连接时,我只在 linux 操作系统上遇到了如上所述的异常。
这是关闭套接字的代码。
boost::system::error_code ec;
pClientSocket->shutdown( boost::asio::socket_base::shutdown_type::shutdown_receive, ec);
pClientSocket->close(eCode);
delete pClientSocket;
pClientSocket= nullptr;
【问题讨论】:
-
我不知道 boost 接口但是 socket() 有一个标志 SO_REUSEADDR 如果在 boost 中有一个等效的标志你可以试试?
-
否则,您可能只需要给系统一点时间来关闭它在该套接字上打开的所有连接,然后才能重用该端口。