我正在尝试使 gawk 程序充当简单的服务器,绑定到网络套接字并回答查询。
到目前为止,我的脚本是这样的:
#!/usr/local/bin/gawk
BEGIN {
s="nc -l 10.0.0.21 2345";
while (s |& getline inp) {
print inp;
print "Response to " inp |& s;
}
}
你会注意到我使用的是netcat
而不是 gawk 的内部网络吗?根据我对文档的阅读,理论上我应该能够设置s="/inet/tcp/2345/0/0";
gawk 绑定到端口 2345 上的每个本地 IP 地址,但我认为如果我只想绑定到一个 IP(在多 IP 主机上),我需要使用像我所做的那样的东西。此外,当我测试/inet/tcp/...
符号时,我无法让它工作。该脚本将运行,并等待输入,但它似乎没有绑定到套接字,所以它不会得到任何输入。
所以......随着netcat替代品的工作,我的问题是......在客户端关闭连接后,我如何让服务器保持运行?
使用上面的代码,我可以连接并发送多行来获得响应,但是一旦客户端断开连接,服务器也会退出。
我认为这是因为nc
命令行关闭了输入流,从而结束了 while 循环,但在我看来,while 循环应该只是通过重新打开s
变量作为协同进程来继续。
我该如何进行这项工作?如果我可以使用/inet/tcp/...
符号,这不是问题吗?我应该将整个 gawk 脚本包装在一个 shell 脚本中,然后在退出时重新运行它吗?或者我应该将内部while循环包装在另一个while循环中吗?或者是其他东西?
我尝试用这个替换while循环的调用:
...
while (1) {
s |& getline inp;
print inp;
...
但它以完全相同的方式退出。
谢谢你的帮助。