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

问题描述 投票:0回答:1

我正在编写一个小型服务器/客户端程序。我不确定如何使用

select()
在已连接到服务器的客户端之间进行选择,以及添加新客户端。

即,服务器程序将启动并侦听客户端。如何使用 select 语句来确定服务器是从现有客户端还是新连接接收数据?

服务器是否总是必须

listen()
accept()
每个新客户端?

c server client posix-select
1个回答
0
投票

在开始处理选择器之前,您应该阅读一些有关非阻塞 I/O 或异步网络的内容。基本上,您的选择器所做的就是循环您创建的文件描述符,并检查是否有人想要执行以下操作之一:

  • 阅读
  • 接受
  • 连接

我可以进一步了解它是如何工作的,但如果你真的想知道,请搜索反应器模式,也许还有通过事件进行编程的工作原理。

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

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

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

如果您想了解其他信息,请说出来,我将编辑此答案。

© www.soinside.com 2019 - 2024. All rights reserved.