0
我寫了一個非常非常簡單的HTTP服務器調用哪個我寫的, 一個簡單的CGI程序,但我的HTTP服務器無法顯示在我的瀏覽器CGI程序的結果。 我的HTTP服務器的部分代碼如下。http服務器調用CGI PROGRM
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;
但瀏覽器不能顯示的結果和超時。
Tkank你了,這是我的學術活動,問題是內容類型就像你說的,我的'DUP2()',我應該DUP標準輸出到'clientfd'。 – Andy