我正在尝试用 C 语言为自己构建一个 Web 应用程序。到目前为止,我已经让 HTTP 服务器正常工作了,但是由于某种原因,当我有需要其他 CSS 的 HTML 文件和 JavaScript 文件时,浏览器(Firefox )会非常快地执行多个请求,导致服务器和客户端之间的套接字连接损坏。我尝试了许多不同的方法来让 HTTP 服务器正常工作,而不会生成损坏的 TCP 连接。
目前,我有一个循环调用accept,并为每个新连接创建一个新线程:
for(;;)
{
int newsockfd = accept(sockfd, (struct sockaddr *)&host_addr, (socklen_t *)&host_addrlen);
if(newsockfd < 0)
{
sendf(stderr, LOG_ERROR, "Failed to accept connection...\n");
continue;
}
pthread_t thread;
if(pthread_create(&thread, NULL, handler, (void *)&newsockfd) != 0)
{
sendf(stderr, LOG_ERROR, "Failed to create a new thread...\n");
return -4;
}
}
Run Code Online (Sandbox Code Playgroud)
我创建线程,同时将套接字文件描述符(表示客户端和服务器之间的新连接)发送到新线程。
处理新创建的线程的函数如下所示:
void * handler(void * argument)
{
int sockfd = *((int *)argument);
struct …Run Code Online (Sandbox Code Playgroud)