c - 是否可以从accept获取唯一的文件描述符

标签 c server client

我正在尝试实现半同步、半异步服务器。在服务器端,请求应被读入由一个线程管理的队列中。然后,我有一个工作线程池,它们正在等待将某些内容添加到队列中,以便它们可以处理请求。我的accept() 调用有问题。 Accept 调用返回相同的文件描述符编号,这会扰乱工作线程,因为它们停止在一个位置写入并写入另一个位置。有没有办法让accept返回唯一的文件描述符?我在这里先向您的帮助表示感谢!该代码相当大,因此将其全部发布是不切实际的,但这是问题所在。还值得一提的是,客户端有多个线程向服务器发出请求。当我打印出新的文件描述符“客户端套接字”时,我可以发现它使用相同的文件描述符编号。

void accept_client_requests(int server_socket)
{
    int client_socket;
    struct sockaddr_in client_addr;
    socklen_t sin_size = sizeof client_addr;


    while ( (client_socket= accept(server_socket, (struct sockaddr*)&client_addr, &sin_size)) > 0 )
    {
        char fileName[BUFSIZ];
        get_file_request(client_socket, fileName); 

        pthread_mutex_lock(&mutex);  
            queue[first].fileName = fileName;    
            queue[first].socket = client_socket;
            ++numInQ;

        pthread_mutex_unlock(&mutex); 
        pthread_mutex_unlock(&empty); 
    }
}

最佳答案

旧文件描述符关闭后,Select 将立即创建新文件描述符

关于c - 是否可以从accept获取唯一的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50716761/

相关文章:

c - 为什么 < 比 != 快得多?

C语法问题

c - C中的字符串交换

python - 如何用bottle.py批量上传图片?

php - 如何使用 Plesk 在我的网络服务器上禁用 https?

javascript - 解析服务器云代码 Node.js 兼容性

c - 接受多个客户的正确方法?

java - Jersey 2.22 : What is the default connect timeout for Client?

比较两个数组的值

javascript - AngularJS 和企业应用程序