问题
无论我怎么重启服务,甚至重启电脑也无法解决。dubbo 提示:Address already in use 问题。 最后debug 一层一层网上找。最后经过测试发现 ServerSocket ignored = new ServerSocket(i); 会存在ignored.close(); 关闭失败问题。
现象
当我运行至portToBind = NetUtils.getAvailablePort(defaultPort); 时 sudo lsof -i tcp:20882 显示没有监听此端口。 当执行至ServerSocket ignored = new ServerSocket(i); 执行sudo lsof -i tcp:20882 显示端口已被监听,当执行ignored.close(); 成功执行未报错。 再次查看端口时,还是显示被监听。最后就提示端口已经被使用。 貌似 20880和20881 一般会启动成功。
截图
原提问者GitHub用户hai-go
这段代码逻辑你自己写个 demo 跑一下看看 IOException 是不是有东西,可能是环境配置的问题
public static synchronized int getAvailablePort(int port) { if (port < MIN_PORT) { return MIN_PORT; }
for (int i = port; i < MAX_PORT; i++) {
if (USED_PORT.get(i)) {
continue;
}
try (ServerSocket ignored = new ServerSocket(i)) {
USED_PORT.set(i);
port = i;
break;
} catch (IOException e) {
// continue
}
}
return port;
}
原回答者GitHub用户
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。