小编Nex*_*uss的帖子

在循环中调用“accept”系统调用会创建损坏的套接字

我正在尝试用 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)

c networking webserver http pthreads

1
推荐指数
1
解决办法
53
查看次数

标签 统计

c ×1

http ×1

networking ×1

pthreads ×1

webserver ×1