我编写了一个非常简单的 HTTP 服务器来调用我编写的一个简单的 CGI 程序,但是我的 HTTP 服务器无法在我的浏览器上显示 CGI 程序的结果。我的 HTTP 服务器的部分代码如下。
while(1)
{
struct sockaddr_in client_addr;
int addrlen = sizeof(client_addr);
/*Accept*/
if((clientfd = accept(sockfd, (struct sockaddr *)&client_addr, (socklen_t*)&addrlen)) < 0)
{
perror("Accpet Error");
close(sockfd);
exit(-1);
}
else
{
/*Fork process*/
if((child = fork()) < 0)
{
perror("Fork Error");
close(sockfd);
exit(-1);
}
else if(child == 0)
{
int fd[2]; //pipe a fd
close(sockfd);
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
buffer1.clear();
buffer1.resize(VECTOR_SIZE);
while(1)
{
if((res = recv(clientfd, buffer1.data(), buffer1.size(), 0)) > 0)
{
string token = "QUERY_STRING=" + buffer1.data();
pipe(fd);
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
execlp("cgi", "cgi", NULL);
//if the bug fixed, will use `execvpe` here
cout << "fail" << endl;
}
}
}
else
{
//exit(0);
close(clientfd);
}
}
}
而且,我的 CGI 程序只是
string reply = "HTTP/1.1 200 OK\nTEST"; cout << reply;
但浏览器无法显示结果并超时。