在windows上使用线程的C web服务器

在windows上使用线程的C web服务器,c,multithreading,sockets,webserver,C,Multithreading,Sockets,Webserver,我不久前开始编写cweb服务器(windows 8),但我尝试自己只使用线程,而没有使用select()选项 这是我的主循环,我会像这样打开每个新线程: uintptr_t new_thread; while (client_sock = accept(server->sock, (struct sockaddr *)&client_info, &size)) { if (client_sock <= 0) quit(); printf("\n[***

我不久前开始编写
c
web服务器(windows 8),但我尝试自己只使用线程,而没有使用
select()
选项

这是我的主循环,我会像这样打开每个新线程:

uintptr_t new_thread;
while (client_sock = accept(server->sock, (struct sockaddr *)&client_info, &size))
{
    if (client_sock <= 0) quit();
    printf("\n[***] : Got a connection from localhost on port %d\n",ntohs(client_info.sin_port));

    code = init_connection(client_sock);
    if (code)
    {
        new_thread = _beginthread(handle_connection, 0, ID++, client_sock);
        if (new_thread == -1)
        {
            fprintf(stderr, "Could not create thread for sending data: %d\n", GetLastError());
            closesocket(client_sock);
            quit();
        }
    }
    else
    {
        debug("Failed to init connection");
        closesocket(client_sock);
        debug("Connection to client ended");
    }   
}
uintpttr\t新螺纹;
while(client_sock=accept(server->sock,(struct sockaddr*)和client_info和size))
{

如果(client_sock正常情况下,在实现一个分叉独立进程的服务器时,我会使子进程保持活动状态,以服务预定义数量的请求(例如100个)然后自杀。这是为了减少分叉所产生的开销,另一方面是从进程中可能的内存泄漏或其他问题中恢复。线程比进程轻,因此更快地关闭它们可能是有意义的

我认为你应该比较优缺点。衡量线程创建和关闭的开销,与保持它们的活动性相比。在任何情况下,你必须确保一次活动的线程数量有限制


关于创建ans的windows详细信息关闭线程,您可以去添加,例如响应。

在这种情况下,使用fork()而不是创建线程可能会更容易。好的,您可能在windows上没有此选项……是的,很抱歉。另外,目前对使用CygWin不感兴趣