即使关闭套接字,服务器仍可继续在Client / Server C应用程序中运行

时间:2019-01-08 16:20:30

标签: c unix tcp client-server

我正在与客户端/服务器一起制作Tic Tac Toe应用程序。当按CTRL + C时,我有一个自定义处理程序,该处理程序关闭套接字(也正在侦听套接字),然后退出。但是,如果我尝试再次运行该程序,有时会出现错误,指出该端口已被使用,因此无法绑定,该过程持续了几分钟(或直到重新启动),持续了几秒钟,有时甚至根本没有发生。我怀疑这是正常过程,但是我想提出第二点意见。此外,对于如何避免这种情况的任何建议将不胜感激!

编辑:忘记了,再次有时,杀死了终端。

1 个答案:

答案 0 :(得分:2)

有一个连接(由IP地址和端口号标识)仍处于TIME_WAIT状态。之所以存在此状态,是因为网络中可能有一些IP包已发送到此连接。尝试绑定套接字时,可能会收到错误EADDRINUSE。 您可以使用netstat进行检查。

了解套接字选项SO_REUSEADDRSO_REUSEPORT

相关: Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?