当前位置: 首页 > 面试题库 >

错误:将套接字与地址绑定时,该地址已被使用,但端口号由netstat免费显示

文建业
2023-03-14
问题内容

我试图将我的套接字(服务器套接字)绑定到端口号8000。它的工作,并为我做的工作。在代码末尾,我也关闭了套接字。在下一个瞬间,我再次运行我的代码,它告诉我该地址已被使用。我已经打印了错误值的含义,strerror(errno);以查看我的代码在每个点上是否正常工作。要检查端口是否空闲,我使用进行了检查,netstat但它显示端口号8000是空闲的。我发生了很多次。每次我再等待几秒钟,然后它又开始工作。我正在使用C语言。那么,我的操作系统为什么会导致这种行为?

再过几秒钟后,我运行代码,然后工作了。

anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo ./a.out 
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1348/lighttpd   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd        
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1131/cupsd      
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1211/mysqld     
tcp6       0      0 :::22                   :::*                    LISTEN      984/sshd        
tcp6       0      0 ::1:631                 :::*                    LISTEN      1131/cupsd      
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo ./a.out 
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
anirudh@anirudh-Aspire-5920:~/Desktop/testing$

问题答案:

我也遇到过同样的问题。这是因为您要关闭与套接字的连接,而不是套接字本身。套接字可以进入TIME_WAIT状态(为确保已传输所有数据,TCP尽可能保证传送),并且最多需要4分钟才能释放。

或者,要获得真正详细/技术的解释,请查看此链接

这肯定很烦人,但这不是错误。请参阅@Vereb对以下有关使用的答案的评论SO_REUSEADDR



 类似资料:
  • 本教程将介绍如何配置Apache以监听指定地址和端口。 当Apache启动时,它会绑定到本地计算机上的某个端口和地址,并等待传入的请求。默认情况下,它会监听计算机上的所有地址。但是,可能需要告知监听特定端口,或仅监听选定地址,或两者的组合。这通常与虚拟主机功能结合使用,后者确定Apache如何响应不同的IP地址,主机名和端口。 指令告诉服务器仅接受指定端口或地址和端口组合的传入请求。如果在指令中仅

  • 这就是我有点困惑的地方。 我在服务器端拿到的地址,有客户端连接的WiFi网络的公有地址(这是我预期的),还有一些端口号,基于我对NATs的理解,应该和客户端实际使用的端口号不一样,是用来翻译地址的。 但是,如果我在客户端上使用了getsockname()函数,则得到的端口号与服务器给出的端口号相同。

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

  • 1.免登录url定义 对接开发者从活动或者商城入口跳转到兑吧页面时,实现用户uid身份信息和积分等参数回传的统一接口url地址。通过免登录url实现开发者用户从指定商城入口直接跳转到兑吧页面,不需要再进行二次登录。 注意事项: 免登录url涉及到签名加密以及有效期验证(5分钟有效期),开发者生成免登录地址时需要有服务端动态生成 2.免登录url接口地址 因为请求兑吧的免登录url链接地址是需要开发

  • 问题内容: 我正在遵循http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html上的UDP教程,现在我已经复制并编译了所有代码,如果我先编译客户端然后再编译服务器,服务器在控制台中将其打印出来 QuoteServerThread行19是 MulticastServerThread行10是 Multica

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