Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 套接字和文件描述符魔术_Sockets_Fastcgi_Lighttpd_Flup - Fatal编程技术网

Sockets 套接字和文件描述符魔术

Sockets 套接字和文件描述符魔术,sockets,fastcgi,lighttpd,flup,Sockets,Fastcgi,Lighttpd,Flup,我已经编写了一个在Web服务器中使用的FCGI实现。我想用lighttpd替换一个简单的设置 我发现了一些奇怪的事情。 当我尝试生成一个Python Flup服务器并连接到它时,它只有在使用TCP套接字时才起作用 (). 但是,在我使用Flup和lighttpd的现有设置中,它也适用于Unix域套接字 (在FCGI中,web服务器将侦听套接字作为stdin提供给FCGI服务器)。 所以我看了一下Flups代码(发现它只是本地和本地的)。似乎只处理TCP,所以UDS不应该工作。 但在lighttp

我已经编写了一个在Web服务器中使用的FCGI实现。我想用lighttpd替换一个简单的设置

我发现了一些奇怪的事情。
当我尝试生成一个Python Flup服务器并连接到它时,它只有在使用TCP套接字时才起作用 (). 但是,在我使用Flup和lighttpd的现有设置中,它也适用于Unix域套接字

(在FCGI中,web服务器将侦听套接字作为stdin提供给FCGI服务器)。 所以我看了一下Flups代码(发现它只是本地和本地的)。似乎只处理TCP,所以UDS不应该工作。 但在lighttpd中,它不知怎的做到了

fastcgi.server = (
    "/heiz" =>
    (
       "python-fcgi" =>
       (
        "socket" => "/tmp/fastcgi2.python.sock",
        "bin-path" => "/var/www/heiz/flup.fcgi",
        "check-local" => "disable",
        "max-procs" => 1
       )
    )
)
运行方式如下:

sudo ss -lxp | grep /tmp/fastcgi2.python.sock 
u_str LISTEN 0      1024                    /tmp/fastcgi2.python.sock-0 4378053                                          * 0                                     users:(("flup.fcgi",pid=349092,fd=3),("flup.fcgi",pid=349092,fd=0))
但是怎么做呢?我错过了什么

我认为相关部分是和

是因为这个吗


我感到困惑

lighttpd打开并绑定到配置的侦听套接字
“socket”=>“/tmp/fastcgi2.python.sock”
,无论是TCP还是UDS,然后在配置
“bin path”=>“/var/www/heiz/flup.fcgi”


我的理解是,Flup认识到在
STDIN\u FILENO
(又称
FCGI\u LISTENSOCK\u FILENO
)上有一个监听套接字,并简单地使用它。

你是对的。然而,Flup只是尝试使用
STDIN\u FILENO
作为
AF\u INET
。这对UDS来说是失败的。然而,不管怎样,只要它来自lighttpd,Flup最终就可以使用UDS。哦,没关系——如果UDS是从FD作为AF_INET打开的(至少对python来说),这显然并不重要