【问题标题】:Server continues to function in Client/Server C application even after closing sockets即使在关闭套接字后,服务器仍继续在客户端/服务器 C 应用程序中运行
【发布时间】:2019-06-03 09:05:38
【问题描述】:

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

编辑:忘记提及,有时,终止终端工作。

【问题讨论】:

  • 你能提供一个可行的例子吗?
  • 代码大约有 500 行,所以我猜你不是那个意思。发生这种情况的一个例子是,例如,当玩家获胜时,服务器和两个客户端都被杀死(套接字关闭,进程被杀死)。有时在那之后我需要等待或重新启动。
  • 你如何处理你的客户,threadsselect() ...?
  • 你在使用signal()吗? -> What happens if you use it?

标签: c unix tcp client-server


【解决方案1】:

有一个连接(由 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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2017-05-26
    • 2020-05-16
    相关资源
    最近更新 更多