从命令行创建Unix命名套接字


Answers:


21

没有与套接字完全等效的mkfifo,即没有命令仅创建“挂起”套接字。这是出于历史原因:服务器功能bind()是在文件系统中创建套接字名称/索引节点的函数,如果该名称已被使用,则会失败。换句话说,服务器无法在预先存在的套接字上运行。

因此,如果您较早创建了套接字,则无论如何首先需要将其删除。没有好处 从格雷戈里的答案中可以看出,如果您为其保留服务器,则可以创建一个套接字,例如netcat。一旦服务器消失,旧的套接字也消失了。一个新的服务器具有一个新的套接字,尽管套接字的名称相同,但所有客户端都需要重新连接。



8

您可以使用python:

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"

同样是C,请参见此答案


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }便于外壳使用: mksock /tmp/test.sock
Tino

0

netcat在这种情况下,我只是使用并保持收听状态:

nc -lkU aSocket.sock

您应该使用netcat-openbsdnetcat-traditional没有-U用于Unix域套接字的开关。


-k强制nc在其当前连接完成后继续监听另一个连接。如果不使用-l选项,则使用此选项是错误的。-U指定使用UNIX域套接字。
JohanBoulé
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.