当前位置: 首页 > 知识库问答 >
问题:

绑定失败:地址已在使用

程磊
2023-03-14

我正在尝试将套接字绑定到以下端口:

if( bind(socket_desc,(struct sockaddr *) &server, sizeof(server)) < 0)
{
    perror("bind failed. Error");
    return 1;
}
puts("bind done");

但它给出:

$ ./serve   
Socket created    
bind failed. Error: Address already in use

为什么会出现这个错误呢?

共有2个答案

锺离霖
2023-03-14

每个人都是正确的。但是,如果您也忙于测试代码,那么如果套接字启动和停止相对较快,那么您自己的应用程序可能仍然“拥有”套接字。尝试将SO_REUSEADDR作为套接字选项:

SO_REUSEADDR到底做什么?

这个套接字选项告诉内核,即使这个端口很忙(处于TIME_WAIT状态),也要继续重复使用它。如果它是忙的,但有另一个状态,您仍然会得到一个地址已经在使用错误。如果您的服务器已关闭,然后在其端口上的套接字仍处于活动状态时立即重新启动,则此操作非常有用。您应该意识到,如果有任何意外的数据进入,它可能会混淆您的服务器,但这是可能的,但不太可能。

有人指出,“套接字是一个5元组(proto,local addr,local port,remote addr,remote port)。SO_REUSEADDR只是说你可以重用本地地址。5元组仍然必须是唯一的!”作者:Michael Hunter(mphunter@qnx.com)。这是正确的,这就是为什么您的服务器不太可能看到意外数据的原因。危险的是,这样一个5元组仍然在网络上四处飘浮,而当它四处飘浮时,来自同一客户端、同一系统上的一个新连接碰巧得到了相同的远程端口。Richard Stevens在“2.7请解释TIME_WAIT状态”中对此进行了解释。

慕和惬
2023-03-14

该错误通常意味着您试图打开的端口已被另一个应用程序使用。尝试使用netstat查看哪些端口是打开的,然后使用一个可用端口。

还要检查您是否绑定到正确的ip地址(我假设是localhost)

 类似资料:
  • 问题内容: 我正在尝试将套接字绑定到以下端口: 但是它给出: 为什么会发生此错误? 问题答案: 该错误通常表示您尝试打开的端口已被另一个应用程序使用。尝试使用netstat查看哪些端口已打开,然后使用可用端口。 还检查您是否绑定到正确的IP地址(我假设它是本地主机)

  • 我有一个运行 IBM worklight 项目的 eclipse 工作区,我想在不同的端口上使用另一个 worklight 项目运行另一个 eclipse 实例。我已经修改了服务器.xml其具有Http端口,如下所示: 以及管理端口,如下所示: 但是当我启动第二台服务器时,我收到以下错误: 本机方法中的致命错误:JDWP没有初始化传输,jvmtiError=AGENT_ERROR_TRANSPOR

  • 这应该很简单,但我在这里错过了一些东西。我有两个玩具类:(a)一个需要连接并提供文件的服务器;和 (b) 请求文件并将其打印在标准输出上的客户端。 服务器代码: 客户代码: 我试图在同一台机器上同时运行服务器和客户机,但是每次我试图运行客户机时,总是从服务器得到这条消息: !!!ERRO:地址已在使用中(绑定失败) 要运行这段代码而不出错,我还需要做什么不同于上面的事情吗? 谢谢。

  • docker构建失败,“地址已在使用中” 我的/etc/docker/daemon.json是: 编辑: edit2 Docker-信息:

  • 问题内容: 当我在Docker项目中运行时,它失败并显示以下消息: 显示如下: 我已经尝试过了,但是没有帮助。 问题答案: 在您的情况下,使用该端口的是其他一些过程,如注释中所述,它帮助您解决了问题。 在其他情况下(我本人也曾多次遇到),它大多是在其他情况下运行的同一容器。在那种情况下非常有帮助,因为我经常让相同的容器在其他目录中运行,然后尝试在其他使用相同容器名称的地方再次运行。 如何为我提供帮

  • 我有一个测试应用程序,我创建了一个测试应用程序,用于开始使用Eclipse学习weblogic。昨天,当我作为/在服务器上运行时,jsp页面运行良好,我得到了我创建的基本页面。但今天我有一条错误消息: 本机方法中的致命错误:JDWP没有初始化传输,jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)错误:传输错误202:绑定失败:地址已在使用错误:JDWP传输dt_