gpt4 book ai didi

c++ - C/C++ 中的 CGI/FastCGI 应用程序(套接字编程问题)

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:30 26 4
gpt4 key购买 nike

我正在开发我的第一个 C/C++ fastCGI 应用程序,使用 FastCGI Developers Kit .

我已成功构建示例程序之一(如下所示的代码段):

int main (void)
{
int count = 0;
long pid = getpid();

streambuf * cin_streambuf = cin.rdbuf();
streambuf * cout_streambuf = cout.rdbuf();
streambuf * cerr_streambuf = cerr.rdbuf();

FCGX_Request request;

FCGX_Init();
FCGX_InitRequest(&request, 0, 0);

while (FCGX_Accept_r(&request) == 0)
{
/* Handle request */
}

return 0;
}

但是,当我运行上面的示例时,它只是终止了。调试后,我意识到 FCGX_Accept_r 正在返回一个错误代码。经过进一步调查,我意识到 accept() 方法调用失败了。

实际失败的行是:

 socket = accept(listen_sock, (struct sockaddr *)&sa, &len);

传递给函数的参数是:

listen_sock: 0
len: 112
sa:

{un = {sun_family = 0, sun_path = "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\020\\"'\\000\\000\\032\\356m\\000\\000\\000\\000\\377\\377\\377\\377\\364\\277\\022\\000\\310\\366\\377\\277\\001\\000\\000\\000\\000\\000\\000\\000X\\366\\377\\277\\343\\276\\004\\b\\377\\377\\377\\377\\001\\000\\000\\000\\001\\000\\000\\000\\000\\000\\000\\000\\001\\000\\000\\000\\310\\366\\377\\277\\210\\366\\377\\277F\\277\\004\\b\\310\\366\\377\\277\\001\\000\\000\\000\\000"}, in = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero = "\\000\\000\\000\\000\\000\\000\\000"}}

我是套接字编程的新手,所以我需要一些帮助来诊断导致 accept() 失败的原因。

根据以上信息,有人能看出为什么调用 accept() 会失败吗?

我在 Ubuntu 10.x 上开发

最佳答案

对这个 SDK 了解不多,但是粗略浏览一下他们的 header 就会发现您需要先创建一个套接字来接受传入的请求,并将其传递给 FCGX_InitRequest 方法。

http://www.fastcgi.com/devkit/include/fcgiapp.h

揭示了一个方法:int FCGX_OpenSocket(const char *path, int backlog); 我假设你调用它来创建套接字,然后调用 FCGX_InitRequest socket 作为第二个参数...

因此您的代码失败的原因是,您为套接字传入了 0,这是无效的!

关于c++ - C/C++ 中的 CGI/FastCGI 应用程序(套接字编程问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com