4

我上学期学习了计算机网络,并为我的项目在 linux 中进行了一些 C 编程(使用 gcc)。我一直遇到的一件非常乏味的事情是,如果我的程序崩溃或停止(然后我必须按 Ctrl+C 来杀死它),网络端口仍然会保持打开状态大约一分钟。所以如果我想立即再次运行程序,我必须先进入头文件,更改端口,重新制作程序,然后最后运行它。显然,这很快就会变得非常乏味。

有什么方法可以配置它,一旦进程被杀死,端口就会立即释放?通过 linux 中的某些设置,或者在我的程序的 makefile 中,甚至在 C 中以编程方式?

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

4

3 回答 3

11

设置SO_REUSEADDR套接字上的选项。

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

来自Beej 的网络编程指南

于 2009-06-17T17:55:03.087 回答
2

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

 
于 2009-06-17T18:04:12.790 回答
1

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

另一方面,如果你正在编写一个客户端软件,那么你应该避免选择一个特定的端口,让系统给你一个随机的端口。

于 2009-06-17T17:58:36.963 回答