使用select()在现有客户端或新客户端(C)之间进行选择

时间:2015-01-29 18:23:13

标签: c select client server

我正在编写一个小型服务器/客户端程序。我不确定如何使用select()在已连接到服务器的客户端和添加新客户端之间进行选择。

即:服务器程序将启动并监听客户端。如何使用select语句来了解服务器是从现有客户端接收还是从新连接接收?

服务器是否始终必须listen()accept()每个新客户端?

谢谢。

1 个答案:

答案 0 :(得分:0)

在弄清楚处理选择器之前,您应该阅读有关非阻塞I / O或异步网络的信息。基本上你的选择器所做的是遍历你创建的文件描述符,并检查是否有人想要执行以下操作之一:

  • 接受
  • 连接

我可以进一步研究它的作用但是如果你真的想知道请搜索反应器模式,也许是如何通过事件进行编程。

无论如何,检测新连接或已经存在的连接可能是微不足道的,也可能不是那么微不足道,具体取决于您对所执行操作的控制程度。

首先。您在选择器上注册服务器套接字。此套接字将永远保持监听,当客户端连接时,将触发接受事件,并且将发生一个选择器循环。这将创建另一个文件描述符,您必须在选择器中注册。

从现在开始,您必须控制您的连接意图。你想读书吗?写?不仅如此,因为这是异步编程,您不能或不应该阻止信息必须以块的形式传输。您将接收所有数据块并协调所有文件描述符。这是非平凡的部分。

如果你想知道其他任何事情请说出来,我会编辑这个答案。