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

我试图将我的套接字(服务器套接字)绑定到端口号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

以上是 错误:将套接字与地址绑定时,该地址已被使用,但端口号由netstat免费显示 的全部内容, 来源链接: utcz.com/qa/402524.html

回到顶部