上个学期我上了计算机网络,并在linux(使用gcc)中为我的项目做了一些C编程。我遇到的一件非常繁琐的事情是,如果我的程序崩溃或停滞(然后我必须按Ctrl + C来杀死它),网络端口仍然会打开一分钟左右。因此,如果我想立即再次运行该程序,我将首先进入头文件,更改端口,重新制作程序,然后最终运行它。显然,这非常非常繁琐。
有没有办法在进程被终止后立即释放端口的位置进行配置?可以通过linux中的某些设置,也可以通过我的程序的makefile,甚至是以C编程方式?
编辑:我指的是在编写服务器并选择特定端口来托管程序时。
答案 0 :(得分:11)
在套接字上设置选项SO_REUSEADDR
。
int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
答案 1 :(得分:2)
我打赌大约两分钟:)
正如@Cogsy所说,SO_REUSEADDR
套接字选项是你的朋友。
让自己熟悉TCP状态,它是导致问题的TIME_WAIT
状态:
答案 2 :(得分:1)
我认为您正在编写的程序是服务器,因此您需要使用已知端口。如果是这种情况,您应该使用Cogsy指出的套接字上的SO_REUSE_ADDR选项。
另一方面,如果您正在编写客户端sw,那么您应该避免选择特定端口,允许系统随机提供。