【发布时间】:2011-01-03 12:24:32
【问题描述】:
我正在使用FastCGI Developers Kit 开发我的第一个 C/C++ fastCGI 应用程序。
我已经成功构建了一个示例程序(如下图sn-p):
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 上开发
【问题讨论】:
标签: c++ c linux sockets fastcgi