我想用 C 创建一个简单的示例 TCP 服务器。它应该能够接收多个客户端连接,并在关闭连接之前分别向每个客户端发送一个字符串。
许多代码示例(例如 this)使用
while(1)
循环来持续侦听传入的客户端连接。即使在 Richard Stevens - Unix Network Programming,第 1 卷,第三版,第 5.2 节,图 5.2 中也使用了 for ( ; ; )
,所以几乎相同。
这可能是最简单的解决方案,但是从程序员的角度来看它正确吗?这样的循环是不是有些令人沮丧?
作为替代方案,至少可以捕获
SIGKILL
并将其用作 while
的条件,而不是 1
。然而,这并不是这个问题的答案中的第一个建议。
实际问题:在这种情况下,除了while(1)
之外,还有其他解决方案吗?是否有一个标准,或者取决于具体的程序?就我而言,我希望尽可能简单,但我也想避免
while(1)
。
您需要一个能够“启动”、打开侦听器并继续运行的程序。如果你没有循环,我想你最终只会回答一次,然后不得不退出?这可能不是你想要的。
如果服务器是“永远监听并响应请求的东西”,那么答案是“某种程度上”。
理想情况下,您可以编写一个没有重大错误或泄漏、错误的简单应用程序,但即使如此,服务器(作为侦听器)最终可能会崩溃,因为操作系统可能存在潜在泄漏。
比如,您会编写一个不进行日志记录的服务器吗?可能不是。你会把它放在有无限磁盘空间的服务器上吗?可能不会。
正常运行时间建立在获取程序(代码)并保持活动进程(运行实例)的基础上[借用 Xinu 的术语]。
因此,随着时间的推移,添加了许多额外的层来围绕您的程序,例如:
inetd
)