我正在编写一个小型服务器/客户端程序。我不确定如何使用
select()
在已连接到服务器的客户端之间进行选择,以及添加新客户端。
即,服务器程序将启动并侦听客户端。如何使用 select 语句来确定服务器是从现有客户端还是新连接接收数据?
服务器是否总是必须
listen()
和 accept()
每个新客户端?
在开始处理选择器之前,您应该阅读一些有关非阻塞 I/O 或异步网络的内容。基本上,您的选择器所做的就是循环您创建的文件描述符,并检查是否有人想要执行以下操作之一:
我可以进一步了解它是如何工作的,但如果你真的想知道,请搜索反应器模式,也许还有通过事件进行编程的工作原理。
无论如何,检测新连接或已存在的连接可能是微不足道的,也可能不是那么微不足道的,具体取决于您希望对所执行的操作拥有多少控制权。
首先。您在选择器上注册您的服务器套接字。该套接字将永远保持侦听状态,当客户端连接时,将触发接受事件并发生一个选择器周期。这将创建另一个文件描述符,您必须在选择器中注册该文件描述符。
从现在开始,你必须控制你的连接意图。你想读书吗?写?不仅如此,因为这是异步编程,您不能或不应该阻止信息必须以块的形式传输。您将负责接收所有数据块并协调所有文件描述符。这是不平凡的部分。
如果您想了解其他信息,请说出来,我将编辑此答案。