没有线程和阻塞套接字 - 是否可以处理多个连接?

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

我有一个程序需要:

  • 处理 20 个连接。我的程序将在每个连接中充当客户端,每个客户端连接到不同的服务器。
  • 连接后,我的客户端应该每秒向服务器发送一个请求并等待响应。如果 9 秒内没有发送请求,服务器将导致客户端超时。
  • 一个连接导致其他连接出现问题是不可接受的。
  • 我无权访问线程,也无权访问非阻塞套接字。我有一个带有阻塞套接字的单线程程序。
  • 编辑:我无法使用线程和非阻塞套接字的原因是我使用的是非标准系统。我有一个可用的 RTOS(实时操作系统)任务。

要解决这个问题,需要使用 select,但我不确定它是否足够。

最初我连接到所有客户端。但是 select 只能用于查看读取或写入是否会阻塞,而不能用于查看连接是否会阻塞。 因此,当我连接到 2 个客户端并且它们都在等待服务时,如果第 3 个客户端不起作用怎么办,连接将阻塞,导致前 2 个连接也超时。

这个问题可以解决吗?

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

我认为连接问题可以通过为连接操作设置超时来解决,这样它就会足够快地失败。当然,如果网络确实正常工作,这会限制您,但是您到某些服务器的路径非常长(慢)。这是糟糕的设计,但你的要求相当苛刻。

有关连接超时的详细信息,请参阅此答案


0
投票

看来你需要隔离连接。好吧,如果你不能使用线程,你总是可以求助于老式的进程。 通过分叉服务器进程来生成每个客户端,并在需要它们之间进行通信时使用传统的 IPC 机制。

如果您既不能使用多进程方法,恐怕您会很难做到这一点。

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