您好我正在尝试编写一个非常简单的网络服务器。它将对任何请求响应相同的简单网页。这是代码片段:
while(1) {
if ((newFd = accept(s, (struct sockaddr *) &clientAddr, &sockAddrSize)) == ERROR) {
printf("error accept\n");
close(s);
return;
}
pid = fork();
if(pid == 0) {
handle_request(newFd);
close(newFd);
return;
}
}
句柄请求函数是:
void handle_request(int newFd) {
int readBytes;
int sendBytes;
readBytes = recv(newFd, buffer, BUFFSIZE, 0);
sendBytes = send(newFd, page, strlen(page), 0);
printf("I have send %d B out of %d B\n", sendBytes, strlen(page));
}
其中 page 是简单的全局变量:
char *page = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello</h1>\r\n";
发生的情况是,该浏览器正在等待(似乎正在接收数据,选项卡中的圆圈正在旋转)并且什么都不显示(尝试了 Firefox 和 Chromium)。只有在我杀死主进程(使用accept())之后,它才会显示页面。
我不知道哪里有问题,我想我做得对。对于新进程,我发送响应并关闭接受返回的描述符并关闭子进程。