C 中的 TCP 服务器和 `while(1)` 来保持监听

问题描述 投票:0回答:1

我想用 C 创建一个简单的示例 TCP 服务器。它应该能够接收多个客户端连接,并在关闭连接之前分别向每个客户端发送一个字符串。

许多代码示例(例如 this)使用

while(1)
循环来持续侦听传入的客户端连接。即使在 Richard Stevens - Unix Network Programming,第 1 卷,第三版,第 5.2 节,图 5.2 中也使用了
for ( ; ; )
,所以几乎相同。

这可能是最简单的解决方案,但是从程序员的角度来看它正确吗?这样的循环是不是有些令人沮丧?

作为替代方案,至少可以捕获

SIGKILL
并将其用作
while
的条件,而不是
1
。然而,这并不是这个问题的答案中的第一个建议。

实际问题:在这种情况下,除了while(1)

之外,还有其他解决方案吗?是否有一个标准,或者取决于具体的程序?就我而言,我希望尽可能简单,但我也想避免
while(1)

c while-loop tcp network-programming tcpserver
1个回答
0
投票
如果您问“这有用吗”,答案是肯定的。

您需要一个能够“启动”、打开侦听器并继续运行的程序。如果你没有循环,我想你最终只会回答一次,然后不得不退出?这可能不是你想要的。

如果服务器是“永远监听并响应请求的东西”,那么答案是“某种程度上”。

理想情况下,您可以编写一个没有重大错误或泄漏、错误的简单应用程序,但即使如此,服务器(作为侦听器)最终可能会崩溃,因为操作系统可能存在潜在泄漏。

比如,您会编写一个不进行日志记录的服务器吗?可能不是。你会把它放在有无限磁盘空间的服务器上吗?可能不会。

正常运行时间建立在获取程序(代码)并保持活动进程(运行实例)的基础上[借用 Xinu 的术语]。

因此,随着时间的推移,添加了许多额外的层来围绕您的程序,例如:

    并行运行多个副本
  • 拥有一个系统进程,确保入站连接请求发送到进程(评论中提到了
  • inetd
  • 有一个看门狗进程检查进程并在它们死掉时重新启动它们。
  • 使用各种网络层解决方案(负载均衡、多个 DNS 记录等)。
(而这一切只是在经典服务器+IPv4时代,“云计算”将其带到了另一个架构层面)

© www.soinside.com 2019 - 2024. All rights reserved.