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

时间:2019-04-18 20:57:15

标签: c multithreading server client

我正在从事一个涉及多线程服务器的项目,该服务器理论上应该能够同时接受任意数量的客户端。在每个客户端与服务器的连接上,需要产生一个新线程来满足客户端的需求。我对listen()函数是否扮演了这个角色感到困惑。这是否需要处于无限循环中?我应该一次只监听一个客户端连接吗?

当我调用listen函数时,我传递了套接字文件描述符和连接数,在我的情况下,我传递了5。我不以循环或任何方式运行它,我只调用它一次。但是,考虑到我需要的实现,我认为这不是正确的方法

// now the server can listen
int listennum = listen(socketfd, 5); 
if (listennum != 0) {
   printf("Listen has failed..\n"); 
   exit(0); 
} 
else {
   printf("Server is listening..\n"); 
}

1 个答案:

答案 0 :(得分:0)

  

我很困惑listen()函数是否在其中发挥了任何作用。   这是否需要处于无限循环中?

不。 listen()设置套接字的属性,将其标记为程序可以接受连接的被动套接字。不必重复进行多次。不要忘记先bind()使用套接字(您也应该只执行一次)。

  

我应该只听吗   一次只有一个客户端连接?

这并不是套接字接口提供的一个概念,尽管有一个相关的概念,即可以一次将多少个等待接受套接字的连接排队。这由listen()的第二个参数控制。

  

当我调用listen函数时,我传递了套接字文件描述符并   连接数(在我的情况下为5)。我不运行   这个循环或其他任何形式,我只需调用一次即可。

这正是您应该做的,但不是您应该做的 only 事情。

  

但是,我没有   认为这是考虑到实施的正确方法   需要

在调用listen()之后,您必须使用accept()函数来实际接受连接,您可能会丢失。 是您要循环运行的内容。您可以从同一侦听套接字接受任何数量的连接。