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

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

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

有帮助吗?

解决方案

在套接字上设置 SO_REUSEADDR 选项。

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

来自 Beej的网络编程指南

其他提示

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

 

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top