是否可以从 accept 获取唯一的文件描述符
Is it possible to get unique file descriptors from accept
我正在尝试实现半同步、半异步服务器。在服务器端,请求应该被读入一个由一个线程管理的队列中。然后我有一个工作线程池,它们正在等待将某些内容添加到队列中,以便它们可以处理请求。我的 accept() 调用有问题。 accept 调用 returns 相同的文件描述符编号,这会扰乱工作线程,因为它们停止在一个地方写入并写入另一个地方。有没有办法接受 return 独特的文件描述符?我在这里先向您的帮助表示感谢!代码相当大,因此 post 全部不切实际,但这是问题所在。还值得一提的是,客户端有多个线程向服务器发出请求。当我打印出新的文件描述符“client socket”时,我可以看到它使用了相同的文件描述符编号。
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 将在旧文件描述符关闭后立即创建新文件描述符
我正在尝试实现半同步、半异步服务器。在服务器端,请求应该被读入一个由一个线程管理的队列中。然后我有一个工作线程池,它们正在等待将某些内容添加到队列中,以便它们可以处理请求。我的 accept() 调用有问题。 accept 调用 returns 相同的文件描述符编号,这会扰乱工作线程,因为它们停止在一个地方写入并写入另一个地方。有没有办法接受 return 独特的文件描述符?我在这里先向您的帮助表示感谢!代码相当大,因此 post 全部不切实际,但这是问题所在。还值得一提的是,客户端有多个线程向服务器发出请求。当我打印出新的文件描述符“client socket”时,我可以看到它使用了相同的文件描述符编号。
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 将在旧文件描述符关闭后立即创建新文件描述符