当前位置: 首页 > 面试题库 >

Linux中的正常关机服务器套接字

齐向笛
2023-03-14
问题内容

我希望能够停止在Linux中的服务器套接字上进行侦听,并确保正确处理了从客户端角度打开的所有连接,并且没有突然关闭它们(即:接收ECONNRESET)。

即:

sock = create_socket();
listen(sock, non_zero_backlog);
graceful_close(sock);

如果认为调用close()并处理已经接受的套接字就足够了,但是可以在内核积压中打开一些连接,如果在服务器套接字上调用close(),这些连接将突然关闭。


问题答案:

唯一可行的方法(我发现)是:

  1. 阻止accept()添加更多客户端

  2. 在某处有一个打开的套接字列表,然后等待它们完全正确关闭,这意味着:

    • 使用shutdown()告诉客户端,您将在插座上不再工作

    • read()稍等片刻,以确保与此同时已发送所有客户端

    • 然后close()用于释放每个 客户端 套接字。

  3. 然后,您可以安全close()监听套接字。

您可以(并且应该)使用超时来确保空闲连接不会永远持续下去。



 类似资料:
  • 问题内容: 这是我正在使用的简单网络服务器 除了保持活力外,效果很好。当第一个请求进入时,被调用。但是过程并没有结束。实际上,TCP连接仍处于打开状态,这允许另一个请求通过,这是我试图避免的。 如何关闭现有的保持活动连接? 问题答案: 您可以调用响应回调。这将关闭请求连接。 由于没有什么可做的,它也将结束您的过程,最终结果与在那里进行调用相同。

  • 问题内容: 我敢肯定这是一个简单的问题,但是我不知道socket.io文档在哪里,而http://labs.learnboost.com/socket.io/上的文档并没有真正的帮助。 假设我有一个socket.io http服务器,并写了一个网站来连接它。 我如何为服务器提供保护,以使未经授权的人(未通过网站连接的人)被阻止/丢弃/禁止。 如何在服务器端结束套接字连接?所以如果我有 如何结束套接

  • 我在netty server应用程序中面临资源问题。 无法看到与Netstat的任何打开或挂起的连接... 我使用ReadTimeoutHandler关闭未使用的连接,并使用以下exceptionHandler代码: 服务器引导程序如下所示: 更新2:根据请求,我将日志处理程序移到ReadTimeouthandler前面,以下是日志。客户端通常断开连接的情况: 客户端不断开连接的情况: 所以收盘前

  • 问题内容: 有没有一种方法可以快速绑定到TCP端口/ ip地址,并简单地将所有信息打印到STDOUT?我有一个简单的调试解决方案,它可以将内容写入127.0.0.1:4444,并且我希望能够简单地从bash绑定端口并打印遇到的所有内容。是否有捷径可寻? 问题答案: 看到

  • 或者也许有另一种方法。 OBS.我现在不打算让游戏运行在服务器上对付作弊者。因为这将对我的安装程序中的服务器cpu造成很大的负载。

  • 问题内容: 我有服务器和客户端。我的服务器接受所有连接并返回到客户端字符串。但是当我尝试发送更多行时,它崩溃了 这是我的服务器代码: 这是我的客户代码: 问题答案: 来自in中的javadoc: 关闭返回将关闭关联的套接字。 另外,关闭(和所有其他打印机/写入器)也将关闭其基础流。因此,您可以通过关闭(in ),然后尝试写入已关闭的套接字来关闭您的套接字。 要解决此问题,请不要关闭。垃圾收集将为您