我用纯C编写了这个小型服务器应用程序,它监听给定端口中的传入连接,这非常简单.
它与通常的套接字初始化过程一致,创建socket()然后bind()到端口,说它的a listen(),并且ifinitely循环select()等待传入的连接accept().
一切都很好,就像一个魅力,除了如果我让事情运行几个月,监听端口关闭,而应用程序服务器不知不觉地运行,因为我写它信任监听套接字不会关闭,如果没告诉.
所以问题是:为什么在没有我的应用程序关注的情况下关闭端口,我该怎么做以防止它发生?
这是预期的行为吗?我应该检查某种异常还是在监听套接字上进行"健康检查",以便在必要时重新打开它?
代码:https://gist.github.com/Havenard/e930be035a3bee75c018(是的,我知道我正在使用它0作为错误的提示,这是不好的实践和东西,但它与我在评论中解释的问题无关,当时我设置套接字文件描述符0是为了停止循环并关闭应用程序).
我会从清理它开始:
if (n_case > 0) memcpy(nick, node->nick, (n_case > 32 ? 32 : n_case));; sizeof是你的朋友.这只是几个小时的编辑.
我的猜测是,在清理/重构后,你的"虫子"会神奇地浮出水面.
脚注:不,我不会为你做你的工作.不是100分,不是1000分.请清理你自己的烂摊子.
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |