考虑/var/run/acpid.socket
。我可以随时连接到它并断开连接。与以下内容进行比较nc
:
$ nc -l -U ./myunixsocket.sock
Ncat: bind to ./myunixsocket.sock: Address already in use. QUITTING.
nc
显然只允许一次性插座。那么问题是,如何创建一个类似于 的套接字/var/run/acpid.socket
以供多次使用和重用?
答案1
您可以选择-k
来执行此操作nc
。
-k Forces nc to stay listening for another connection after its cur- rent connection is completed. It is an error to use this option without the -l option. When used together with the -u option, the server socket is not connected and it can receive UDP data- grams from multiple hosts.
例子:
$ rm -f /tmp/socket # unlink the socket if it already exists
$ nc -vklU /tmp/socket # the server
Connection from mack received!
yes
Connection from mack received!
yes
...
建议unlink()
在使用后使用套接字——但事实上,大多数程序会检查它是否存在并将其删除前呼唤bind()
它;如果文件系统中存在套接字路径并且您尝试访问它,即使没有程序以任何方式使用它,bind()
您也会收到错误。EADDRINUSE
在 Linux 上避免这种混乱的一种方法是使用“抽象的”unix 套接字,但它们似乎不受netcat
.