【发布时间】:2022-01-12 22:48:50
【问题描述】:
我正在开发一个带有线程的 TCP 客户端服务器应用程序,其中客户端轮流向服务器发送消息(类似于基于回合的游戏)。 服务器向客户端发送消息,但客户端有 n 秒的响应时间。如果客户端没有及时响应,服务器应该在不关闭连接的情况下转到下一个客户端。有没有办法跳过服务器的 read() 调用?
【问题讨论】:
-
听起来像XY problem。为什么你认为客户需要跳过阅读?用如此简短的描述很难确定任何事情。但通常客户端会做它需要做的任何事情,服务器会独立处理超时。
-
作为一般规则,当从一个不可查找的文件(如套接字)中消费数据时,必须读取每个字节才能读取任何后续字节。您对所读内容做什么由您自行决定,如果有的话,您可以自行决定,但不,您不能按照您的意思跳过此类数据源的读取。
-
跳过读取调用的最佳方法是使用非阻塞读取。并记账。
-
@wildplasser,我看不出非阻塞读取如何提供与问题相关的任何意义上的 skipping 读取调用。避免阻塞不会跳过读取,甚至它本身也不会提供超时。
-
@lucimaster 您的描述听起来像是您想跳过客户端的读取。但是您的最后一条评论更清楚地表明您要跳过的是服务器端阅读。在这种情况下,
select会超时。
标签: c networking pthreads