如何防止程序崩溃时网络端口保持打开状态

时间:2009-06-17 17:52:13

标签: c network-programming crash ports

上个学期我上了计算机网络,并在linux(使用gcc)中为我的项目做了一些C编程。我遇到的一件非常繁琐的事情是,如果我的程序崩溃或停滞(然后我必须按Ctrl + C来杀死它),网络端口仍然会打开一分钟左右。因此,如果我想立即再次运行该程序,我将首先进入头文件,更改端口,重新制作程序,然后最终运行它。显然,这非常非常繁琐。

有没有办法在进程被终止后立即释放端口的位置进行配置?可以通过linux中的某些设置,也可以通过我的程序的makefile,甚至是以C编程方式?

编辑:我指的是在编写服务器并选择特定端口来托管程序时。

3 个答案:

答案 0 :(得分:11)

在套接字上设置选项SO_REUSEADDR

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

来自Beej's Guide to Network Programming

答案 1 :(得分:2)

我打赌大约两分钟:) 正如@Cogsy所说,SO_REUSEADDR套接字选项是你的朋友。 让自己熟悉TCP状态,它是导致问题的TIME_WAIT状态:

 

答案 2 :(得分:1)

我认为您正在编写的程序是服务器,因此您需要使用已知端口。如果是这种情况,您应该使用Cogsy指出的套接字上的SO_REUSE_ADDR选项。

另一方面,如果您正在编写客户端sw,那么您应该避免选择特定端口,允许系统随机提供。