作成した単純なCGIプログラムを呼び出すために非常に単純なHTTPサーバーを作成しましたが、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;
ですが、ブラウザは結果とタイムアウトを表示できません。