🔗 外部程序
🔗 dnsserver
由于标准的 gethostbyname(3) 库调用会阻塞,Squid 必须使用外部进程来实际执行这些调用。通常会有十个 dnsserver 进程由 Squid 启动。通信通过绑定到回环接口的 TCP 套接字进行。 dns.c 中的函数主要负责启动和停止 dnsservers。与 dnsservers 的读写操作发生在 IP 和 FQDN 缓存模块中。
🔗 pinger
尽管 Squid 可以直接发送和接收 ICMP 消息,但出于两个重要原因,我们使用外部进程:
- 由于 Squid 同时处理大量文件描述符,因此当 ICMP 由单独的进程处理时,我们可以获得更精确的 RTT(往返时间)测量结果。
- 发送和接收 ICMP 需要超级用户权限。我们不希望 Squid 以 root 身份启动,而是希望将更小、更简单的 pinger 程序安装为 setuid 权限。
🔗 unlinkd
unlink(2) 系统调用可能导致进程阻塞很长时间。因此,我们不希望从 Squid 中调用 unlink()。相反,我们将它们传递给这个外部进程。
🔗 redirector
重定向器进程从标准输入读取 URL,并将(可能已更改的)URL 写入标准输出。它被实现为一个外部进程,以最大限度地提高灵活性。
导航:网站搜索,网站页面,分类,🔼 向上