首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建公共unix域套接字?

如何创建公共unix域套接字?
EN

Unix & Linux用户
提问于 2018-09-21 07:09:21
回答 1查看 10.2K关注 0票数 4

考虑一下/var/run/acpid.socket。在任何时候,我都可以连接到它,并断开它。将其与nc进行比较:

代码语言:javascript
复制
$ nc -l -U ./myunixsocket.sock
Ncat: bind to ./myunixsocket.sock: Address already in use. QUITTING.

nc显然只允许单用途套接字。问题是,如何创建类似于/var/run/acpid.socket的套接字,以便进行多次使用和重用?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-09-21 12:16:53

您可以使用-k选项对nc执行此操作。

-k迫使nc在它的cur- rent连接完成后继续监听另一个连接.如果不使用-l选项,则使用此选项是错误的。当与-u选项一起使用时,服务器套接字没有连接,它可以从多个主机接收UDP数据。

示例:

代码语言:javascript
复制
$ 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的支持。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/470459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档