我用纯 C 语言编写了这个小型服务器应用程序,它侦听给定端口中的传入连接,非常简单。
它使用通常的套接字初始化过程,创建到端口的socket()
then bind()
,说它的 a listen()
,并无限循环select()
等待传入的连接到accept()
。
一切都很好,就像一个魅力,除了如果我让这个东西运行几个月,监听端口会关闭,而应用程序服务器会一直运行而不知道它,因为我写它是为了相信监听套接字不会关闭,如果没有告诉。
所以问题是:为什么在我的应用程序不关心的情况下关闭端口,我能做些什么来防止它发生?
这是预期的行为吗?我应该检查某种异常还是在侦听套接字上进行“健康检查”以在必要时重新打开它?
代码:https ://gist.github.com/Havenard/e930be035a3bee75c018 (是的,我意识到我正在0
用作错误提示,这是不好的做法和东西,但正如我在评论中解释的那样,它与问题无关,当我将套接字文件描述符设置为0
它是为了停止循环并关闭应用程序)。