如何使用 mknod 正确创建套接字?

ser*_*ach 1 linux socket

我尝试为 uwsgi 和 nginx 之间的通信创建一个套接字。

困难在于我不知道我应该指定哪些主要和次要数字:

v:/tmp# mknod wsgi_pgame.sock c
mknod: missing operand after `c'
Special files require major and minor device numbers.
Run Code Online (Sandbox Code Playgroud)

而且我不知道该设备应该是块还是字符。

能否请你帮忙?

Den*_*ker 7

Mknod ( mknod p, not c) 创建一个 fifo,一个 unix 套接字。Unix 套接字是不同的野兽,不需要 mknod(或 root 权限)。配置正确,uwsgi 将为您创建套接字,您只需要确保权限正确以便 nginx 可以使用它。对于 Debian-ish 系统,类似这样的东西。

shared-socket = 1
socket        = /tmp/uwsgi.sock
chmod_socket  = 600
chown_socket  = www-data
uid           = www-data
gid           = www-data
Run Code Online (Sandbox Code Playgroud)

  • FIFO(又名“管道”,在`ls` 输出中显示为`p`)与UNIX 套接字(在`ls` 输出中显示为`=`)*不同*。不幸的是,您不能使用 mknod 创建 UNIX 套接字。这主要是由于历史原因:即通常情况下,`bind()` 调用期望节点*不*存在,因此在实际连接过程之前预先创建 UNIX 套接字节点是没有意义的。也就是说,如果你真的想创建它,大多数现代 `netcat` / `nc` 变体都可以做到。 (2认同)