我正在从事一个涉及多线程服务器的项目,该服务器理论上应该能够同时接受任意数量的客户端。在每个客户端与服务器的连接上,需要产生一个新线程来满足客户端的需求。我对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");
}
答案 0 :(得分:0)
我很困惑
listen()
函数是否在其中发挥了任何作用。 这是否需要处于无限循环中?
不。 listen()
设置套接字的属性,将其标记为程序可以接受连接的被动套接字。不必重复进行多次。不要忘记先bind()
使用套接字(您也应该只执行一次)。
我应该只听吗 一次只有一个客户端连接?
这并不是套接字接口提供的一个概念,尽管有一个相关的概念,即可以一次将多少个等待接受套接字的连接排队。这由listen()
的第二个参数控制。
当我调用listen函数时,我传递了套接字文件描述符并 连接数(在我的情况下为5)。我不运行 这个循环或其他任何形式,我只需调用一次即可。
这正是您应该做的,但不是您应该做的 only 事情。
但是,我没有 认为这是考虑到实施的正确方法 需要
在调用listen()
之后,您必须使用accept()
函数来实际接受连接,您可能会丢失。 那是您要循环运行的内容。您可以从同一侦听套接字接受任何数量的连接。