我试图在端口号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保证传输)and take up to 4 minutes to release.

或者,对于真正详细的/技术性的解释,check this link

这当然很烦人,但这不是一个错误.有关SO_REUSEADDR的用法,请参阅@vereb对下面这个答案的 comments .

C++相关问答推荐

新的memaligning函数有什么用?

获取二维数组的最大元素

如何确保内存分配在地址附近?

GCC:try 使用—WError或—pedantic using pragmas

当main函数调用被重构时,C函数给出错误的结果

为什么在此程序中必须使用Volatile关键字?

tick.q中的Kdb+键控表语法

如何在POSIX-UEFI中获得输入?

MacOS下C++的无阻塞键盘阅读

C11/C17标准允许编译器清除复合文字内存吗?

如何逐位读取二进制文件?

用于计算位数和的递归C函数

为什么二进制文件的大小不会随着静态数据的大小而增加?

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

即使我在C++中空闲,也肯定会丢失内存

程序对大输入给出错误答案

挥发性语义的形式化理解

分支预测和UB(未定义的行为)

在C中定义函数指针?

在 C/C++ 中原子按位与字节的最佳方法?